2016-08-23 2 views
1

Ich möchte Layouts in NLog verwenden, um der Lage sein, die Mindestprotokollebene unter Verwendung einer externen Variablen zu ändern:In NLog, ist es möglich, Layouts zu verwenden, um den Loglevel zu definieren?

<nlog> 
    <variable name="loglevel" value="Debug"/> 
    <targets> 
     <target ... /> 
    </targets> 
    <rules> 
     <logger name="*" minlevel="${loglevel}" writeTo="LogFile" /> 
    </rules> 
</nlog> 

Nach dem Start NLog, alle Protokollebenen (zB: Tracing, Debug, Info, ...) sind auf false gesetzt, was anzeigt, dass NLog das Attribut minlevel nicht richtig parsen konnte.

Die NLog Layout-Funktion scheint nur mit Attributen target zu funktionieren. Was ich erreichen möchte: In meiner realen App ist Loglevel keine Konstante, sondern eine benutzerdefinierte layout renderer.

Ich habe auch versucht, value="Debug" durch value="LogLevel.Debug" ohne Erfolg zu ersetzen.

Antwort

0

Die minlevel, maxlevel und level Attribute auf <logger> sollten feste Zeichenfolgen sein. In diesem Fall können Sie eine <filter>, z.

<nlog> 
    <variable name="loglevel" value="Debug"/> 
    <targets> 
     <target ... /> 
    </targets> 
    <rules> 
     <logger name="*" writeTo="LogFile" > 
      <filter condition="${level} >= ${loglevel}" action="Log"> 
     </logger> 
    </rules> 
</nlog> 

anzeigen docs

+0

Der Filter funktioniert Zustand, aber nur, wenn als Konstante zB definiert: 'level> = LogLevel.Debug'. Ich konnte es nicht als Variable arbeiten lassen: 'level> = $ {loglevel}'. Auch die zu verwendende Syntax scheint etwas anders zu sein als Ihre, siehe hier: https://github.com/NLog/NLog/wiki/Conditions – tigrou

Verwandte Themen