我创建了一个自定义事件日志,并希望我的所有应用程序都写入同一个事件日志。正如您在所附图片中看到的,DistributedCOM
是Svc Ctrl Mgr
2 个源写入同一个事件日志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;
}