是否可以在代码中为 Windows EventLogs 指定事件类别?
Is it possible to specify an event category for Windows EventLogs in code?
我正在寻找一种不使用它附带的 Message Files, as I don't want the mess 的方法。
我希望能够使用类似于
的方法编写事件
public void WriteEvent(EventLogEntryType type, string description, int eventId, int categoryId)
并在相同的 class 中指定这些类别,我在一些枚举中注册了我的 EventSource。
谢谢!
很遗憾,这是不可能的。
自从我提到那个博客 post 以来,甚至认为 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 的实例方法是线程安全的。
我正在寻找一种不使用它附带的 Message Files, as I don't want the mess 的方法。
我希望能够使用类似于
的方法编写事件public void WriteEvent(EventLogEntryType type, string description, int eventId, int categoryId)
并在相同的 class 中指定这些类别,我在一些枚举中注册了我的 EventSource。
谢谢!
很遗憾,这是不可能的。
自从我提到那个博客 post 以来,甚至认为 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 的实例方法是线程安全的。