c# - custom - log4net xmlconfigurator




Hiérarchie log4net et niveaux de consignation (5)

Ce site dit

Les enregistreurs peuvent recevoir des niveaux. Les niveaux sont des instances de la classe log4net.Core.Level. Les niveaux suivants sont définis dans l'ordre croissant de priorité :

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

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

Question

  • Si je mets Min et Max par exemple DEBUG et ERROR, il imprime everthing DEBUG, INFO, WARN et ERROR. Sans utiliser de filtre min et max. Si je spécifie ERROR (Niveau de journalisation = ERREUR) Inclura-t-il DEBUG, INFO & WARN
 <filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="ERROR"/>
     <param name="LevelMax" value="ERROR"/>
 </filter>

Au lieu du 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éfinir le niveau comme Erreur, il inclura DEBUG, INFO, WARN et ERROR. Est-ce possible avec log4net?

Publication de la configuration log4net en fonction de l'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>


C'est vrai que la documentation officielle ( Apache log4net ™ Manual - Introduction ) indique qu'il y a les niveaux suivants ...

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

... mais bizarrement quand je vois l'assemblée 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 en conjonction avec PostSharp OnBoundaryEntry et OnBoundaryExit depuis longtemps. 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?


Cela peut aider à comprendre ce qui est enregistré à quel niveau les Loggers 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 croissant de gravité: Niveau du journal.

Nombre de niveaux enregistrés pour chaque niveau de paramètre:

 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

DEBUG affichera tous les messages, INFO tout sauf les messages DEBUG, et ainsi de suite.
Habituellement on utilise INFO ou WARN. Cela dépend de la politique de l'entreprise.


Essayez comme ça, ça a marché pour moi

<root>
  <!--<level value="ALL" />-->
  <level value="ERROR" />
  <level value="INFO" />
  <level value="WARN" />     
</root>

Cela enregistre 3 types d'erreurs - erreur, info et avertissement


Voici un code indiquant la priorité de tous les niveaux de 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.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





log4net-configuration