2016-12-01 14 views
1

我正在使用Nlog 2.1並嘗試將錯誤寫入具有不同eventId的Windows事件記錄器。更好地區分不同的錯誤。 如果我指定eventId屬性它的工作,但如果我沒有看到Windows事件記錄器中的任何記錄。NLog 2.1 EventId EventLog在未指定時不工作

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(); 
    } 
+0

你的代碼說「不工作」和「工作「,所以它在您構建自己的logeventinfo時起作用? – Julian

+0

是的,它使用LogEventInfo – Farukh

回答

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:有4.3.11 NLOG測試它