2

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

同一日志文件下的多个来源

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

下面是我为事件日志创建的类库。

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 无法停止并引发错误。图片如下。

在此处输入图像描述

编辑 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;
}
4

0 回答 0