我正在寻找一种不使用Message Files的方法,因为我不想要随之而来的混乱。
我希望能够使用类似于的方法编写事件
public void WriteEvent(EventLogEntryType type, string description, int eventId, int categoryId)
并在我注册我的 EventSource 的同一类中指定这些类别,在一些枚举中。
谢谢!
我正在寻找一种不使用Message Files的方法,因为我不想要随之而来的混乱。
我希望能够使用类似于的方法编写事件
public void WriteEvent(EventLogEntryType type, string description, int eventId, int categoryId)
并在我注册我的 EventSource 的同一类中指定这些类别,在一些枚举中。
谢谢!
不幸的是,这是不可能的。
甚至认为自从我提到的那篇博客文章以来,API 方面发生了一些变化,但原则保持不变。请参阅文档 + 示例:
https://msdn.microsoft.com/en-us/library/650k61tw(v=vs.100).aspx
https://msdn.microsoft.com/en-us/library/system.diagnostics.eventinstance.categoryid(v=vs.100).aspx
我为此找到了一个可接受的解决方法;使用不同的源 ID,而不是 categoryId。它更简单,可以使用简单的 API 来完成。
示例:自行管理事件源,为每个类别类型创建事件源。使用一些惰性创建逻辑,例如通过运行
if (!EventLog.SourceExists(sourceName))
{
lock (_eventSourceCreationLock)
{
if (!EventLog.SourceExists(sourceName))
{
EventLog.CreateEventSource(sourceName, _logName);
}
}
}
然后,使用它来编写每个源的每个日志条目:
EventLog.WriteEntry(sourceName, description, type, id);
这些示例也是线程安全的,因为静态调用会创建一个新的内部事件日志。
EventLog 的实例方法不能保证是线程安全的。