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

Coc*_*lla 3 nlog

我已经设置了EventLog目标:

<target xsi:type="EventLog"
  name="EventLog"
  layout="${longdate:universalTime=true}|${level:uppercase=true}|${logger}|${message}"
  source="MyApp"
  log="Application" />
Run Code Online (Sandbox Code Playgroud)

现在,显然并非我的所有事件都具有相同的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);
Run Code Online (Sandbox Code Playgroud)

...但我的活动总是将事件ID设置为0.任何人都知道如何使这个工作?

Coc*_*lla 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" />
Run Code Online (Sandbox Code Playgroud)

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