NLog 2.1 EventId для EventLog не работает, если не указано
Я использую Nlog 2.1 и пытаюсь записать ошибки в Windows Event logger с другим eventId. Чтобы лучше различать разные ошибки. Если я указываю свойство eventId, оно работает, но если нет, я не вижу никаких записей в Windows Event Logger.
Файл 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();
}
1 ответ
Решение
Вызов logger.Error("Sample error message");
идет не так как EventLogTarget
пытается преобразовать ${event-properties:EventID}
в целое число.
Поскольку макет рендеринга в NLog никогда не возвращается null
(но string.Empty
), это даст исключение - которое будет поймано NLog. Во внутреннем журнале NLog вы должны увидеть FormatException
,
Поэтому нам нужно указать значение по умолчанию, вы можете сделать это с помощью whenEmpty
:
<target xsi:type="EventLog"
...
eventId="${event-properties:EventID:whenEmpty=0}" />
PS: протестировал его с NLog 4.3.11