1

我正在寻找一种不使用Message Files的方法,因为我不想要随之而来的混乱。

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

public void WriteEvent(EventLogEntryType type, string description, int eventId, int categoryId)

并在我注册我的 EventSource 的同一类中指定这些类别,在一些枚举中。

谢谢!

4

1 回答 1

0

不幸的是,这是不可能的。

甚至认为自从我提到的那篇博客文章以来,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 的实例方法不能保证是线程安全的。

于 2016-03-28T10:47:13.830 回答