.Net Enterprise Library - 已经存在带有guid的eventsource实例

时间:2014-12-28 01:08:09

标签: c# enterprise-library

我正在研究的问题是我需要为每个线程创建单独的日志文件。但是当我创建多个可观察的侦听器实例时,我看到一个错误,即事件源的实例已经存在,我做了一些研究,并且知道我们只能有一个事件源实例。有关如何登录单独的日志文件的任何解决方法。

代码段

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();

1 个答案:

答案 0 :(得分:3)

发生错误,因为有多个Logger实例正在使用(EventSource)。只能使用一个特定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; }
    }

    // ...
}