다른 스레드에서 Enterprise Library 5.0의 로깅 응용 프로그램 블록을 사용하여 로깅 할 일부 코드가 있습니다. LAB 스레드가 안전합니까? 다른 스레드에서 정상적으로 로깅 할 수 있습니까? 아니면 한 번에 하나의 스레드에서만 사용되도록 로깅 코드를 동기화해야합니까?Microsoft 엔터프라이즈 라이브러리 5.0 로깅 응용 프로그램 블록 스레드가 안전합니까?
7
A
답변
8
Enterprise 라이브러리 5.0 로깅은 스레드로부터 안전합니다.
로깅하기 전에 EL은 속성 인 TraceListener
을 확인합니다. 특정 TraceListener가 스레드로부터 안전하지 않으면 수신기의 TraceData
메서드를 호출하기 전에 Monitor.Enter(listener);
을 수행합니다.
0
는 지금까지 내가 아는 한, 엔터프라이즈 라이브러리 3.1 로깅 스레드로부터 안전하지 않습니다. Logger 클래스에서 static을 사용하는 LogWriter 클래스의 GetAvailableTraceListeners (IList traceListeners) 호출을 둘러싼 잠금이 없습니다.
내가 이것을 알아낼 수 있어야했는지 아니면 소스로 이동하는 것이 알아 내야하는지 궁금한데 –
@ 가브리엘, 공식 문서 전용 토론에서 로깅 스레드 안전성에 대한 논의는 표시되지 않습니다. 캐싱 블록에 대해. 제 3 자 사이트에서 스레드로부터 안전하다고 말했지만 확인하는 것이 좋습니다. –