如何将多个应用程序(源)中的事件写入同一事件日志?

时间:2017-09-12 05:40:38

标签: c# event-log eventlog-source

我创建了一个自定义事件日志,并希望我的所有应用程序都写入同一个事件日志。正如您在附件中看到的那样,DistributedCOMSvc Ctrl Mgr是写入同一事件日志System的两个来源。

Multiple sources under the same log file

同样,我有2个服务要写入同一个eventLog。 我尝试通过创建一个事件日志并从我创建的2个Windows服务中传递不同的源名称来实现这一点。但我发现只有一个服务写入日志,而另一个服务没有。

下面是我为Event Log创建的类库。

public class EventLogger
{
    private EventLog eventLog1 = new System.Diagnostics.EventLog();

    public EventLogger(string logSource)
    {
        if (!System.Diagnostics.EventLog.SourceExists(logSource))
        {
            System.Diagnostics.EventLog.CreateEventSource(logSource, "SampleLog");
        }
        eventLog1.Source = logSource;
        eventLog1.Log = "SampleLog";
    }

    public void WriteLog(string message)
    {
        eventLog1.WriteEntry(message);
    }

创建了第一个Windows服务

public partial class Service1 : ServiceBase
{
    private EventLogger.EventLogger eventLog;
    public Service1()
    {
        InitializeComponent();
        eventLog = new EventLogger.EventLogger("WinService1");
    }

    protected override void OnStart(string[] args)
    {
        try
        {
            eventLog.WriteLog("Service started in 1st");
        }
        catch (Exception ex)
        {
            EventLog.WriteEntry(ex.ToString());
        }
    }

    protected override void OnStop()
    {
        eventLog.WriteLog("Service stopped");
    }
}

如上所述,也创建了第二个Windows服务。

public partial class Service2 : ServiceBase
{
    private EventLogger.EventLogger eventLog;
    public Service2()
    {
        InitializeComponent();
        eventLog = new EventLogger.EventLogger("WinService2");
    }

    protected override void OnStart(string[] args)
    {
        try
        {
            eventLog.WriteLog("Service started in 2nd");
        }
        catch (Exception ex)
        {
            EventLog.WriteEntry(ex.ToString());
        }
    }

    protected override void OnStop()
    {
        eventLog.WriteLog("Service stopped");
    }
}

Service1似乎没有记录任何内容,而我可以看到Service2的日志。我可能在这里错误地做了很多事情。请帮我找到解决方案。此外,如果可以通过使用log4Net实现这一点,那么也欢迎解决方案。提前谢谢。

编辑:此外,当我尝试停止服务时,服务1无法停止并抛出错误。图片如下。

enter image description here

编辑2 :刚刚更改了EventLogger类的构造函数,如下所示,然后就可以了!!我不完全确定这是否是造成不正常运作的真正原因。而且我不确定它是否与Log属性的设置有关。你们中的任何人投掷的任何光都将不胜感激。我想更好地理解这里究竟发生了什么。谢谢。

string logName = "NewLog";
public EventLogger(string logSource)
{
    if (!System.Diagnostics.EventLog.SourceExists(logSource))
    {
        System.Diagnostics.EventLog.CreateEventSource(logSource, logName);
    }
    eventLog1.Source = logSource;
}

0 个答案:

没有答案