gpt4 book ai didi

.net - 如何写入自定义 Windows 事件日志?

转载 作者:行者123 更新时间:2023-12-01 13:08:48 24 4
gpt4 key购买 nike

我正在尝试通过 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 ,它没有写任何东西,所以这是解决该问题的一部分。)

最佳答案

问题似乎与源名称有关。具体来说,如果我更改源名称,则可以成功写入。这是由于 EventLog.Source 底部的以下行文档:

If a source has already been mapped to a log and you remap it to a new log, you must restart the computer for the changes to take effect.



在开发过程中,日志名和日志源被创建和销毁了几次,我可能在没有更改源名称的情况下更改了日志名。

假设我的原始来源和日志是 "OldSource""OldLog" .我通过更改代码以尝试写入 "NewSource" 来确定这可能是问题的根源。和 "NewLog" .当我两者都更改时,我成功创建并写入 "NewLog" .当我尝试写信给 "NewLog" 时通过使用 "OldSource" 创建它然而,它失败了。

我通过重新启动我的开发系统并运行完全相同的代码(使用 "NewLog""OldSource" )来确认这是问题所在,并且它起作用了。

我想这是重新启动确实解决了它的一次! :)

关于.net - 如何写入自定义 Windows 事件日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/804284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com