3

我已经像这样设置了 EventLog 目标:

<target xsi:type="EventLog"
  name="EventLog"
  layout="${longdate:universalTime=true}|${level:uppercase=true}|${logger}|${message}"
  source="MyApp"
  log="Application" />

现在,显然不是我所有的事件都具有相同的 ID,所以我想在每条消息的基础上设置事件 ID,而不是在配置中设置静态 ID。我相信这应该有效:

var logger = LogManager.GetCurrentClassLogger();

var logEvent = new LogEventInfo(LogLevel.Warn, logger.Name, "Test message");
logEvent.Properties.Add("EventID", 4444);

logger.Log(logEvent);

...但我的事件总是将事件 ID 设置为 0。有人知道如何让它工作吗?

4

2 回答 2

12

我想通了-您必须在eventId目标的属性中使用布局:

<target xsi:type="EventLog"
  name="EventLog"
  layout="${longdate:universalTime=true}|${level:uppercase=true}|${logger}|${message}"
  source="MyApp"
>>  eventId="${event-properties:EventID:whenEmpty=0}" <<
  log="Application" />

我还为 NLog 和 log4net 创建了Timber日志记录外观,这使得使用不同事件 ID 记录消息变得非常简单。

于 2013-06-26T17:02:38.553 回答
1

在 github hub repo 上有一个包含 eventId 的 EventLog 目标的示例配置。eventId 将使用呈现事件 ID 的布局。

https://github.com/NLog/NLog/wiki/Eventlog-target

于 2014-10-20T19:27:41.763 回答