我正在使用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}
"Logger": "${logger}",${newline}
"StackTrace": "${stacktrace}",${newline}
"Message": "${message}",${newline}
"Exception": "${exception:format=ToString,Data}"${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();
}
答案 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进行测试