it-swarm.com.de

Hierarchie und Protokollierungsstufen von log4net

Diese Seite sagt

Logger können Ebenen zugewiesen werden. Ebenen sind Instanzen der log4net.Core.Level-Klasse. Die folgenden Ebenen sind in der Reihenfolge der Erhöhung der Priorität definiert:

  • ALLE
  • DEBUGGEN
  • INFO
  • WARNEN
  • ERROR
  • TÖDLICH
  • OFF

DEBUG scheint die niedrigste Priorität zu haben und ERROR ist höher.

Frage

  • Wenn ich Min und Max als Beispiel DEBUG und ERROR einstelle, werden alle Werte für DEBUG, INFO, WARN und ERROR ausgegeben. Ohne Verwendung von Min- und Max-Filter. Wenn ich ERROR spezifiziere (Logging level = ERROR) Enthält es DEBUG, INFO & WARN
 <filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="ERROR"/>
     <param name="LevelMax" value="ERROR"/>
 </filter>

Anstelle von Min- und Max-Filter. Ist es möglich, eine Ebene zu konfigurieren und alle anderen Ebenen darunter für die Protokollierung einzuschließen?.

Beispiel - Setze Level als Fehler, dies beinhaltet DEBUG, INFO, WARN und ERROR. Ist das mit log4net möglich?

Das Posten der log4net-Konfiguration basiert auf einem der folgenden Kommentare:

     <?xml version="1.0" encoding="utf-8" ?>
     <configuration>
        <configSections>
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
        </configSections >
        <log4net debug="true">
  <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
        <layout type="log4net.Layout.XMLLayout" /> -->
        <param name="File" value="TestLog.log" />
        <param name="AppendToFile" value="false" />
        <layout type="log4net.Layout.PatternLayout">
            <header type="log4net.Util.PatternString" value="[START LOG] %newline" />
            <footer type="log4net.Util.PatternString" value="[END LOG] %newline" />
            <conversionPattern value="%d [%t] %-5p - %m%n" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG"/>
            <param name="LevelMax" value="ERROR"/>
        </filter>
    </appender>
<root>
        <level value="ALL" />
        <appender-ref ref="LogFileAppender" />
    </root>
    <logger name="log4NetExample">
        <!-- <appender-ref ref="B" /> -->
        <level value="ALL" />
        <appender-ref ref="LogFileAppender" />
    </logger>
</log4net>
113
Siva

Dies kann hilfreich sein, um zu verstehen, was auf welcher Ebene aufgezeichnet wird. Loggern können Ebenen zugewiesen werden. Ebenen sind Instanzen der log4net.Core.Level-Klasse. Die folgenden Ebenen werden in der Reihenfolge des zunehmenden Schweregrads definiert: Protokollebene.

Anzahl der für jede Einstellungsstufe aufgezeichneten Stufen:

 ALL    DEBUG   INFO    WARN    ERROR   FATAL   OFF
•All                        
•DEBUG  •DEBUG                  
•INFO   •INFO   •INFO               
•WARN   •WARN   •WARN   •WARN           
•ERROR  •ERROR  •ERROR  •ERROR  •ERROR      
•FATAL  •FATAL  •FATAL  •FATAL  •FATAL  •FATAL  
•OFF    •OFF    •OFF    •OFF    •OFF    •OFF    •OFF
72
Mel Pama

Für die meisten Anwendungen möchten Sie einen Mindestpegel, aber keinen Höchstpegel festlegen.

Wenn Sie beispielsweise Ihren Code debuggen, setzen Sie die Mindeststufe auf DEBUG und in der Produktion auf WARN.

35
Ilya Kogan

DEBUG zeigt alle Nachrichten an, INFO alle außer DEBUG-Nachrichten und so weiter.
Normalerweise verwendet man entweder INFO oder WARN. Dies hängt von der Unternehmenspolitik ab.

19
weismat

Wie andere angemerkt haben, ist es normalerweise vorzuziehen, eine minimale Protokollierungsstufe anzugeben, um diese Stufe und alle anderen zu protokollieren, die schwerwiegender sind als diese. Es scheint, als würden Sie nur rückwärts über die Protokollierungsstufen nachdenken.

Wenn Sie jedoch die Protokollierung einzelner Ebenen genauer steuern möchten, können Sie log4net anweisen, nur eine oder mehrere bestimmte Ebenen mit der folgenden Syntax zu protokollieren:

<filter type="log4net.Filter.LevelMatchFilter">
  <levelToMatch value="WARN"/>
</filter>

Sie können auch eine bestimmte Protokollierungsstufe ausschließen, indem Sie dem Filter einen Knoten "Verweigern" hinzufügen.

Sie können mehrere Filter zusammen stapeln, um mehrere Ebenen anzugeben. Zum Beispiel, wenn Sie nur die Level WARN und FATAL wollten. Wenn die gewünschten Ebenen aufeinanderfolgend waren, ist der LevelRangeFilter geeigneter.

Referenzdokument: log4net.Filter.LevelMatchFilter

Wenn Ihnen die anderen Antworten nicht genügend Informationen geliefert haben, können Sie hoffentlich auf diese Weise das erreichen, was Sie von log4net erwarten.

10
ulty4life

Hier ist ein Code, der die Priorität aller log4net-Ebenen beschreibt:

TraceLevel(Level.All); //-2147483648

TraceLevel(Level.Verbose);   //  10 000
TraceLevel(Level.Finest);    //  10 000

TraceLevel(Level.Trace);     //  20 000
TraceLevel(Level.Finer);     //  20 000

TraceLevel(Level.Debug);     //  30 000
TraceLevel(Level.Fine);      //  30 000

TraceLevel(Level.Info);      //  40 000
TraceLevel(Level.Notice);    //  50 000

TraceLevel(Level.Warn);      //  60 000
TraceLevel(Level.Error);     //  70 000
TraceLevel(Level.Severe);    //  80 000
TraceLevel(Level.Critical);  //  90 000
TraceLevel(Level.Alert);     // 100 000
TraceLevel(Level.Fatal);     // 110 000
TraceLevel(Level.Emergency); // 120 000

TraceLevel(Level.Off); //2147483647


private static void TraceLevel(log4net.Core.Level level)
{
   Debug.WriteLine("{0} = {1}", level, level.Value);
}

Bildbeschreibung hier eingeben

10

In der offiziellen Dokumentation ( Apache log4net ™ Handbuch - Einführung ) heißt es, dass es die folgenden Ebenen gibt ...

  • ALLE
  • DEBUGGEN
  • INFO
  • WARNEN
  • ERROR
  • TÖDLICH
  • OFF

... aber seltsamerweise, wenn ich Assembly log4net.dll, v1.2.15.0 versiegelte Klasse log4net.Core.Level sehe ich die folgenden Ebenen definiert ...

public static readonly Level Alert;
public static readonly Level All;
public static readonly Level Critical;
public static readonly Level Debug;
public static readonly Level Emergency;
public static readonly Level Error;
public static readonly Level Fatal;
public static readonly Level Fine;
public static readonly Level Finer;
public static readonly Level Finest;
public static readonly Level Info;
public static readonly Level Log4Net_Debug;
public static readonly Level Notice;
public static readonly Level Off;
public static readonly Level Severe;
public static readonly Level Trace;
public static readonly Level Verbose;
public static readonly Level Warn;

Ich benutze TRACE schon lange in Verbindung mit PostSharp OnBoundaryEntry und OnBoundaryExit. Ich frage mich, warum diese anderen Ebenen nicht in der Dokumentation sind. Was ist die wahre Priorität all dieser Ebenen?

8
barrypicker