hiérarchie log4net et niveaux de journalisation

Ce site dit

Les enregistreurs peuvent être affectés à des niveaux. Les niveaux sont des instances de la classe log4net.Core.Level. Les niveaux suivants sont définis par ordre de priorité croissant :

  • 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 règle les exemples Min et Max, DEBUG et ERROR impriment tous les mots DEBUG, INFO, WARN et ERROR. Sans utilisation de filtre min et max. Si je spécifie ERROR (niveau de journalisation = ERROR), cela inclura-t-il DEBUG, INFO & WARN?
    

Au lieu des filtres 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 en tant qu’erreur, il inclura DEBUG, INFO, WARN et ERROR. Est-ce possible avec log4net?

Enregistrement de la configuration log4net basée sur l’un des commentaires:

     
-->
<!-- -->

Cela peut aider à comprendre ce qui est enregistré à quel niveau des enregistreurs peuvent être affectés à des niveaux. 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 

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

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

DEBUG affichera tous les messages, INFO tous en dehors des messages DEBUG, etc.
Généralement, on utilise INFO ou WARN. Cela dépend de la politique de l’entreprise.

Comme d’autres l’ont noté, il est généralement préférable de spécifier un niveau de journalisation minimum pour enregistrer ce niveau et tous les autres plus sévères. Il semble que vous pensiez simplement aux niveaux de journalisation à rebours.

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

    

Ou pour exclure un niveau de journalisation spécifique en ajoutant un nœud “deny” au filtre.

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

Référence Doc: log4net.Filter.LevelMatchFilter

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

Il est vrai que la documentation officielle ( Manuel Apache Log4net ™ – Introduction ) indique les niveaux suivants …

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

… mais bizarrement quand je vois l’assembly log4net.dll, classe v1.2.15.0 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 conjointement avec PostSharp OnBoundaryEntry et OnBoundaryExit depuis longtemps. Je me demande pourquoi ces autres niveaux ne figurent pas dans la documentation. De plus, quelle est la véritable priorité de tous ces niveaux?

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

entrer la description de l’image ici

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

       

Cela enregistre 3 types d’erreurs – erreur, info et avertissement