2016-12-01 2 views
1

Ich benutze Nlog 2.1 und versuche, Fehler in Windows Event Logger mit verschiedenen EventId zu schreiben. Um verschiedene Fehler besser zu unterscheiden. Wenn ich die eventId -Eigenschaft angeben, funktioniert es, aber wenn nicht, sehe ich keinen Datensatz in Windows Event Logger.NLog 2.1 EventId für EventLog funktioniert nicht, wenn nicht angegeben

NLog.config Datei:

<?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> 

Verbrauch:

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

Sie Code sagt „nicht funktioniert“ und „Arbeits ", also funktioniert es, wenn du deine eigene logeventinfo erstellst? – Julian

+0

Ja, es funktioniert mit LogEventInfo – Farukh

Antwort

1

Der Aufruf logger.Error("Sample error message"); schief geht, wie die EventLogTarget versucht, die ${event-properties:EventID} auf eine ganze Zahl zu konvertieren.

Da Layout-Renderings in NLog niemals null (aber string.Empty) zurückgeben, gibt dies eine Ausnahme - die von NLog abgefangen wird. In der NLog's internal log sollten Sie eine FormatException sehen.

Also brauchen wir einen Standardwert angeben, Sie tun können, dass mit dem whenEmpty:

<target xsi:type="EventLog" 
     ... 
     eventId="${event-properties:EventID:whenEmpty=0}" /> 

PS: es getestet mit NLog 4.3.11

Verwandte Themen