gpt4 book ai didi

.net - 编写事件日志条目的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-03 21:35:40 25 4
gpt4 key购买 nike

我最近在部署 Windows 服务时遇到了问题。四台计算机没有引起任何问题,但在第五台计算机上,由于异常,任何启动服务的尝试都失败了。异常堆栈跟踪被写入事件日志,所以我认为应该很容易确定原因:

protected override void OnStart(string[] args)
{
EventLog.WriteEntry("Starting service", EventLogEntryType.Information);

try
{
//...
base.OnStart(args);
}
catch (Exception ex)
{
EventLog.WriteEntry("Service can not start. Stack trace:" + ex.StackTrace, EventLogEntryType.Error);
Stop();
return;
}

EventLog.WriteEntry("Service started", EventLogEntryType.Information);
}

但遗憾的是,日志中从未写入任何信息。我终于将其追溯到正在写入的第一个日志条目。它引发了异常,因为应用程序事件日志中包含最近的条目,并且配置为仅覆盖超过 7 天的条目。

考虑到我无法更改应用程序事件日志的配置,写入事件日志的最佳实践是什么?

我应该总是放 EventLog.WriteEntry在 try 块中,如果是,我应该如何处理异常(将其写入事件日志可能是一个坏主意),我是否应该检查 OnStart 中的事件日志状态?方法,或者你有什么更好的建议?

最佳答案

使用 log4net
使用 log4net 的优点是您可以检查日志记录并以比您在代码中考虑的更大的灵活性来控制它。
如果您正在登录到事件日志,并且看到问题并且没有事件日志条目,那么您总是可以切换到文件附加器日志并看到它工作......然后会告诉您这与它有关事件日志。
log4net 也是防御性的,如果它无法写入日志条目,它不会使您的程序崩溃。所以你不会看到这种情况发生(所以你不会有你的日志文件,但你的程序会运行,你可以再次指定第二个日志记录方法来获取日志文件)。
log4net 文档中的关键点是:

[log4net] is a best-effort and fail-stop logging system.

By fail-stop, we mean that log4net will not throw unexpected exceptions at run-time potentially causing your application to crash. If for any reason, log4net throws an uncaught exception (except for ArgumentException and ArgumentNullException which may be thrown), please send an email to the log4net-user@logging.apache.org mailing list. Uncaught exceptions are handled as serious bugs requiring immediate attention.

Moreover, log4net will not revert to System.Console.Out or System.Console.Error when its designated output stream is not opened, is not writable or becomes full. This avoids corrupting an otherwise working program by flooding the user's terminal because logging fails. However, log4net will output a single message to System.Console.Error and System.Diagnostics.Trace indicating that logging can not be performed.


(我的重点)
对于大多数事情,有一个库比您做得更好。最好的事情是永远不要重新发明,log4net 解决了登录 .Net 的问题,并使您的生活更轻松。

关于.net - 编写事件日志条目的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/313839/

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