我最近在部署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
方法中的事件日志状态,或者你有更好的建议吗?
写入事件日志不是“自己写日志代码”。 – MusiGenesis 2008-11-24 10:58:57
@MusiGenesis:请解释一下。对于我来说,编写日志特定的异常处理是编写代码,例如Log4Net或NLog已经做得更好。我没有理由写另一个日志框架。 – Mendelt 2008-11-24 11:10:49