是否可以在代码中为 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

https://msdn.microsoft.com/en-us/library/system.diagnostics.eventloginstaller.categoryresourcefile(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 的实例方法是线程安全的。