2014-12-28 1 views
3

문제점 각 스레드마다 별도의 로그 파일을 작성해야한다는 문제점이 있습니다. 그러나 관찰 가능한 리스너의 인스턴스를 여러 개 만들면 이벤트 소스의 인스턴스가 이미 존재한다는 오류가 표시됩니다. 일부 조사를 수행하고 이벤트 소스 인스턴스 하나만 가질 수 있음을 알았습니다. 별도의 로그 파일에 로그인하는 방법에 대한 해결 방법이 있습니까? (AN EventSource이다)를 사용하고 Logger의 여러 인스턴스가 있으므로.Net Enterprise Library - guid가있는 eventsource의 인스턴스가 이미 존재합니다.

코드 조각

ObservableEventListener listener1 = new ObservableEventListener(); 
Logger logger1 = new Logger(); 
listener1.EnableEvents(logger1, EventLevel.LogAlways, Keywords.All); 
listener1.LogToFlatFile("LogFile1.txt"); 

logger1.Informational("HELLO1"); 

listener1.DisableEvents(logger1); 
listener1.Dispose(); 

ObservableEventListener listener2 = new ObservableEventListener(); 
Logger logger2 = new Logger(); 
listener2.EnableEvents(logger2, EventLevel.LogAlways, Keywords.All); -- Here I see an error 
listener2.LogToFlatFile("LogFile2.txt"); 

logger2.Informational("HELLO2"); 
listener2.DisableEvents(logger1); 
listener2.Dispose(); 

답변

3

오류가 발생하는된다. 특정 EventSource 인스턴스가 하나만 사용될 수 있습니다. 이것을 피하는 일반적인 방법은 EventSource를 싱글 톤으로 만드는 것입니다.

[EventSource(Name = "MyCompany-Logger")] 
public sealed class Logger : EventSource 
{ 
    private static readonly Lazy<Logger> Instance = new Lazy<Logger>(() => new Logger()); 

    private Logger() { } 

    public static Logger Log 
    { 
     get { return Instance.Value; } 
    } 

    // ... 
} 
관련 문제