我正在尝试通过System.Diagnostics.EventLog
设置基本日志记录到.net中的Windows事件日志,但是我没有看到任何事件实际写入日志。请考虑以下代码:
// Elsewhere in the class
private static readonly string EventLogName = "LogName";
private static readonly string EventLogSource = "AppName";
// In the only function that does something
if (!EventLog.Exists(EventLogName))
{
EventLog.CreateEventSource(EventLogSource, EventLogName);
return;
}
else
{
Trace.TraceInformation("Attempting log");
// This doesn't write anything
EventLog.WriteEntry(EventLogSource,
"StaticWriteEntry",
EventLogEntryType.Error);
// Neither does this
using (var log = new EventLog())
{
log.Log = EventLogName;
log.Source = EventLogSource;
log.WriteEntry("WriteEntry?", EventLogEntryType.Error);
}
}
return;
第一次通过我根据MSDN示例创建日志并退出应用程序。当然,这个日志创建最终将进入设置。后续运行尝试将消息记录到创建的事件日志。
没有抛出异常。该日志似乎已成功创建(我可以在Windows事件查看器中打开它)。没有任何相关内容记录到安全日志中。
不会通过WriteEntry()
记录任何消息。由于名称不匹配,它们不会放在应用程序日志中。在这种特殊情况下,我在禁用UAC的管理员帐户中运行Server2008。 (这是一个较大的遗留产品的一小部分,需要不幸的环境。)我做错了什么?
(我这样做是因为我想在我的app.config中使用EventLogTraceListener
,而且它没有写任何东西,所以这是解决该问题的一部分。)
答案 0 :(得分:4)
问题似乎与源名称有关。具体来说,如果我更改源名称,我可以成功写入。这是由于EventLog.Source
文档底部的以下行:
如果源已映射到日志并将其重新映射到新日志,则必须重新启动计算机才能使更改生效。
在开发过程中,日志名称和日志源已经创建并销毁了几次,我可能在不更改源名称的情况下更改了日志名称。
假设我的原始来源和日志是"OldSource"
和"OldLog"
。我通过更改代码尝试写入"NewSource"
和"NewLog"
来确定这可能是问题的根源。当我改变这两个时,我成功创建并写信给"NewLog"
。当我尝试使用"NewLog"
创建"OldSource"
时写入"NewLog"
时,它失败了。
我确认这是问题,然后重新启动我的开发系统并运行完全相同的代码(使用"OldSource"
和{{1}})并且它有效。
我想这是重启确实修复它的一次! :)