我创建了一个自定义事件日志,并希望我的所有应用程序都写入同一个事件日志。正如您在附件中看到的那样,DistributedCOM
和Svc Ctrl Mgr
是写入同一事件日志System
的两个来源。
同样,我有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无法停止并抛出错误。图片如下。
编辑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;
}