145 votes

Hiérarchie et niveaux de journalisation de log4net

Ce site dice

Des niveaux peuvent être attribués aux enregistreurs. Les niveaux sont des instances de la classe log4net.Core.Level. Les niveaux suivants sont définis dans l'ordre priorité croissante :

  • TOUS
  • DEBUG
  • INFO
  • AVERTISSEMENT
  • ERREUR
  • FATAL
  • OFF

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

Question

  • Si je définis les exemples Min et Max DEBUG et ERROR, tout s'affiche : DEBUG, INFO, WARN et ERROR. Sans utiliser les filtres min et max. Si je spécifie ERROR (niveau de journalisation = ERROR), cela inclura-t-il DEBUG, INFO et WARN ?

    <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR"/> <param name="LevelMax" value="ERROR"/> </filter>

Au lieu d'un filtre min et max. Est-il possible de configurer un niveau et d'inclure tous les autres niveaux inférieurs dans l'enregistrement.

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

J'ai posté la configuration de log4net en me basant sur 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>

129voto

Mel Pama Points 1111

Cela peut aider à comprendre ce qui est enregistré et à quel niveau. Des niveaux peuvent être attribués aux enregistreurs. Les niveaux sont des instances de la classe log4net.Core.Level. Les niveaux suivants sont définis par ordre de gravité croissante - Log Level.

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

38voto

Ilya Kogan Points 7357

Pour la plupart des applications, il est préférable de fixer un niveau minimum, mais pas un niveau maximum.

Par exemple, lorsque vous déboguez votre code, fixez le niveau minimum à DEBUG, et en production, fixez-le à WARN.

19voto

weismat Points 4354

DEBUG affiche tous les messages, INFO tous les messages autres que DEBUG, et ainsi de suite.
En général, on utilise INFO ou WARN. Cela dépend de la politique de l'entreprise.

18voto

Voici un code qui indique 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.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);
}

10voto

ulty4life Points 1842

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

Cependant, si vous souhaitez un contrôle plus fin sur l'enregistrement des niveaux individuels, vous pouvez demander à log4net de n'enregistrer 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 "deny" au filtre.

Vous pouvez empiler plusieurs filtres pour spécifier plusieurs niveaux. Par exemple, si vous ne voulez que les niveaux WARN et FATAL. Si les niveaux souhaités sont consécutifs, le filtre LevelRangeFilter est plus approprié.

Doc. de référence log4net.Filter.LevelMatchFilter

Si les autres réponses ne vous ont pas donné suffisamment d'informations, nous espérons que celles-ci vous aideront à obtenir ce que vous voulez de log4net.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X