未指定时,EventLog的NLog 2.1 EventId无法正常工作

时间:2016-12-01 23:55:55

标签: c# .net nlog event-log

我正在使用Nlog 2.1并尝试使用不同的eventId将错误写入Windows事件记录器。更好地区分不同的错误。 如果我指定eventId属性它正在工作,但如果我没有在Windows事件记录器中看到任何记录。

NLog.config文件:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

<targets>

<target name="console" xsi:type="ColoredConsole"
        layout="${date:format=HH\:mm\:ss}|${level:uppercase=true}|${message}" />

<target xsi:type="EventLog"
    name="eventlog"
    layout="{${newline}
    &quot;Logger&quot;: &quot;${logger}&quot;,${newline}
    &quot;StackTrace&quot;: &quot;${stacktrace}&quot;,${newline}
    &quot;Message&quot;: &quot;${message}&quot;,${newline}
    &quot;Exception&quot;: &quot;${exception:format=ToString,Data}&quot;${newline}}"
    machineName="."
    source="CareFusion Analytics Agent Service"
    eventId="${event-properties:EventID}"
    log="Application" />
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="console" />
    <logger name="*" minlevel="Error" writeTo="eventlog" />
  </rules>
</nlog>

用法:

private static void Main(string[] args)
    {
        Logger logger = LogManager.GetCurrentClassLogger();

        logger.Error("Sample error message"); //This is not working

        LogEventInfo logEvent = new LogEventInfo()
        {
            Level = LogLevel.Error,
            Message = "Hello",                
            LoggerName = logger.Name

        };
        logEvent.Properties.Add("EventID", 400);

        logger.Log(logEvent);  //This is working


        Console.WriteLine("Press any key....");
        Console.ReadKey();
    }

1 个答案:

答案 0 :(得分:1)

logger.Error("Sample error message");尝试将EventLogTarget转换为整数时,调用${event-properties:EventID}出错了。

因为NLog中的布局渲染永远不会返回null(但string.Empty),所以会产生异常 - 这将被NLog捕获。在NLog's internal log中,您应该看到FormatException

因此我们需要指定默认值,您可以使用whenEmpty

来执行此操作
<target xsi:type="EventLog"
        ...
        eventId="${event-properties:EventID:whenEmpty=0}"  /> 

PS:用NLog 4.3.11进行测试