C# 是否可以在代码中为Windows事件日志指定事件类别?

C# 是否可以在代码中为Windows事件日志指定事件类别?,c#,event-log,eventlog-source,C#,Event Log,Eventlog Source,我正在寻找一种不使用的方法,因为我不想要它带来的效果 我希望能够使用类似的方法编写事件 public void WriteEvent(EventLogEntryType type, string description, int eventId, int categoryId) 并在我注册EventSource的同一个类中的某些枚举中指定这些类别 谢谢 不幸的是,这是不可能的 即使从我提到的那篇博文开始,API方面的情况也发生了一些变化,但principe仍然保持不变。 请参阅文档+示例:

我正在寻找一种不使用的方法,因为我不想要它带来的效果

我希望能够使用类似的方法编写事件

public void WriteEvent(EventLogEntryType type, string description, int eventId, int categoryId)
并在我注册EventSource的同一个类中的某些枚举中指定这些类别


谢谢

不幸的是,这是不可能的

即使从我提到的那篇博文开始,API方面的情况也发生了一些变化,但principe仍然保持不变。 请参阅文档+示例:

我找到了一个可以接受的解决方法;使用不同的源id,而不是categoryId。它更简单,可以用简单的API来完成

例如: 自行管理事件源,按类别类型创建事件源。使用一些惰性创建逻辑,例如通过运行

if (!EventLog.SourceExists(sourceName))
{
    lock (_eventSourceCreationLock)
    {
        if (!EventLog.SourceExists(sourceName))
        {
            EventLog.CreateEventSource(sourceName, _logName);
        }
    }
}
然后,使用此命令写入每个源的每个日志条目:

EventLog.WriteEntry(sourceName, description, type, id);
这些示例也是线程安全的,静态调用会创建一个新的内部事件日志


EventLog的实例方法不能保证线程安全。

不幸的是,这是不可能的

即使从我提到的那篇博文开始,API方面的情况也发生了一些变化,但principe仍然保持不变。 请参阅文档+示例:

我找到了一个可以接受的解决方法;使用不同的源id,而不是categoryId。它更简单,可以用简单的API来完成

例如: 自行管理事件源,按类别类型创建事件源。使用一些惰性创建逻辑,例如通过运行

if (!EventLog.SourceExists(sourceName))
{
    lock (_eventSourceCreationLock)
    {
        if (!EventLog.SourceExists(sourceName))
        {
            EventLog.CreateEventSource(sourceName, _logName);
        }
    }
}
然后,使用此命令写入每个源的每个日志条目:

EventLog.WriteEntry(sourceName, description, type, id);
这些示例也是线程安全的,静态调用会创建一个新的内部事件日志

EventLog的实例方法不能保证线程安全