web-dev-qa-db-fra.com

hiérarchie log4net et niveaux de journalisation

Ce site dit

Les enregistreurs peuvent se voir attribuer des niveaux. Les niveaux sont des instances de la classe log4net.Core.Level. Les niveaux suivants sont définis par ordre de priorité croissante :

  • TOUT
  • DÉBOGUER
  • INFO
  • PRÉVENIR
  • ERREUR
  • FATAL
  • OFF

DEBUG semble avoir la priorité la plus basse et ERROR est plus élevé.

Question

  • Si je configure les exemples DEBUG et ERROR sur Min et Max, tous les événements DEBUG, INFO, WARN et ERROR sont imprimés. Sans utilisation de filtre min et max. Si je spécifie ERROR (niveau d'enregistrement = ERROR) inclura-t-il DEBUG, INFO & WARN
 <filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="ERROR"/>
     <param name="LevelMax" value="ERROR"/>
 </filter>

Au lieu de filtre min et max. Est-il possible de configurer un niveau et d'inclure tous les autres niveaux en dessous pour la journalisation.

Exemple - Définissez le niveau sur Erreur, il comprendra DEBUG, INFO, WARN et ERROR. Est-ce possible avec log4net?

Publier la configuration log4net sur la base d’un des commentaires:

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

Cela peut aider à comprendre ce qui est enregistré à quel niveau les loggers peuvent être assignés. Les niveaux sont des instances de la classe log4net.Core.Level. Les niveaux suivants sont définis par ordre de gravité croissante - Niveau de journalisation.

Nombre de niveaux enregistrés pour chaque niveau de réglage:

 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

Pour la plupart des applications, vous souhaitez définir un niveau minimum mais pas un niveau maximum.

Par exemple, lors du débogage de votre code, définissez le niveau minimum sur DEBUG et, en production, sur WARN.

35
Ilya Kogan

DEBUG affichera tous les messages, INFO, en plus des messages DEBUG, etc.
Habituellement, on utilise INFO ou WARN. Cela dépend de la politique de l'entreprise.

19
weismat

Comme d'autres l'ont fait remarquer, il est généralement préférable de spécifier un niveau de journalisation minimal pour consigner ce niveau et tous les autres plus graves. Il semble que vous pensiez simplement aux niveaux de journalisation à l'envers.

Toutefois, si vous souhaitez un contrôle plus précis de la journalisation des niveaux individuels, vous pouvez indiquer à log4net de ne consigner qu'un ou plusieurs niveaux spécifiques à l'aide de la syntaxe suivante:

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

Ou d'exclure un niveau de journalisation spécifique en ajoutant un nœud "refuser" au filtre.

Vous pouvez empiler plusieurs filtres pour spécifier plusieurs niveaux. Par exemple, si vous vouliez seulement les niveaux WARN et FATAL. Si les niveaux que vous vouliez étaient consécutifs, alors LevelRangeFilter est plus approprié.

Document de référence: log4net.Filter.LevelMatchFilter

Si les autres réponses ne vous ont pas donné suffisamment d'informations, nous espérons que cela vous aidera à obtenir ce que vous voulez dans log4net.

10
ulty4life

Voici un code indiquant la priorité de tous les niveaux log4net:

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);
}

entrez la description de l'image ici

10

Il est vrai que la documentation officielle ( Manuel Apache log4net ™ - Introduction ) indique les niveaux suivants ...

  • TOUT
  • DÉBOGUER
  • INFO
  • PRÉVENIR
  • ERREUR
  • FATAL
  • OFF

... mais curieusement quand je vois Assembly log4net.dll, v1.2.15.0 classe scellée log4net.Core.Level, je vois les niveaux suivants définis ...

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;

J'utilise TRACE depuis longtemps avec PostSharp OnBoundaryEntry et OnBoundaryExit. Je me demande pourquoi ces autres niveaux ne sont pas dans la documentation. De plus, quelle est la véritable priorité de tous ces niveaux?

8
barrypicker