写入Windows事件日志时,为每个日志设置事件ID

时间:2013-06-26 13:08:57

标签: nlog

我已经设置了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.任何人都知道如何使其工作?

2 个答案:

答案 0 :(得分:12)

我弄清楚了 - 您必须在目标的eventId属性中使用布局:

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

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

答案 1 :(得分:1)

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

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