Manière correcte d’utiliser log4net (dénomination du logger)

Il existe deux manières de configurer et d’utiliser log4net. Le premier est quand je peux configurer mon propre appender et le logger associé:

           

Et puis quand je veux écrire quelque chose dans le journal, je peux faire ce qui suit:

 ILog log = LogManager.GetLogger("myLog"); log.Info("message"); 

Une autre façon de l’utiliser est de configurer root pour qu’il soit aussi détaillé que je le souhaite:

      

Et dans ce cas, je peux enregistrer des messages comme ceci:

 ILog log = LogManager.GetLogger(typeof(Bar)); log.Info("message"); 

Les avantages de la seconde approche sont que vous pouvez activer ou désactiver certains messages à la volée. Mais le problème est que je développe dans EPiServer CMS et qu’il a son propre système de journalisation qui utilise log4net et si j’active la journalisation des informations au niveau racine, alors beaucoup de journaux système seront écrits.

Comment utilisez-vous log4net? Chaque partie d’un système écrit dans son propre enregistreur, ou tout est écrit dans le consignateur par défaut, et la configuration décide de ce qu’il faut faire ensuite.

En ce qui concerne la manière dont vous enregistrez les messages dans le code, je choisirais la deuxième approche:

 ILog log = LogManager.GetLogger(typeof(Bar)); log.Info("message"); 

Où les messages envoyés au journal ci-dessus seront “nommés” en utilisant le type entièrement qualifié Bar , par exemple

 MyNamespace.Foo.Bar [INFO] message 

L’avantage de cette approche est que c’est la norme de facto pour organiser la journalisation, elle vous permet également de filtrer vos messages de journal par espace de noms. Par exemple, vous pouvez spécifier que vous souhaitez consigner le message de niveau INFO, mais que vous augmentez le niveau de consignation de Bar spécifiquement à DEBUG:

           

La possibilité de filtrer votre enregistrement via son nom est une fonctionnalité puissante de log4net, si vous connectez simplement tous vos messages à "myLog" , vous "myLog" beaucoup de cette puissance!

Concernant le CMS EPiServer, vous devriez pouvoir utiliser l’approche ci-dessus pour spécifier un niveau de journalisation différent pour le CMS et votre propre code.

Pour plus de lecture, voici un article de codeproject que j’ai écrit sur la journalisation:

  • L’art de la notation

Ma réponse est peut-être en retard, mais je pense que cela peut aider les débutants. Vous ne verrez pas les journaux exécutés à moins que les modifications ne soient apscopes comme ci-dessous.

2 Les fichiers doivent être modifiés lorsque vous implémentez Log4net.


  1. Ajoutez la référence de log4net.dll dans le projet.
  2. app.config
  3. Fichier de classe où vous allez implémenter les journaux.

À l’intérieur [ app.config ]:

Tout d’abord, sous “configSections”, vous devez append un morceau de code ci-dessous;

 

Ensuite, sous bloc de configuration, vous devez écrire un morceau de code (ce morceau de code est personnalisé selon mes besoins, mais cela fonctionne comme un charme).

                  

Classe d’appel interne :

Dans la classe où vous allez utiliser ce log4net, vous devez déclarer le morceau de code ci-dessous.

  ILog log = LogManager.GetLogger("log"); 

Maintenant, vous êtes prêt à vous connecter où vous voulez dans cette même classe. Vous trouverez ci-dessous l’une des méthodes que vous pouvez appeler pendant les opérations.

 log.Error("message"); 

Au lieu de nommer ma classe invoquante, j’ai commencé à utiliser les éléments suivants:

 private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

De cette façon, je peux utiliser la même ligne de code dans chaque classe qui utilise log4net sans avoir à se rappeler de changer le code lorsque je copie et colle. Sinon, je pourrais créer une classe de journalisation et faire en sorte que toutes les autres classes héritent de ma classe de journalisation.

Le désavantage de la seconde approche est un grand référentiel avec des enregistreurs créés. Ces enregistreurs font la même chose si root est défini et que les enregistreurs de classe ne sont pas définis. Le scénario standard sur le système de production utilise peu d’enregistreurs dédiés au groupe de classes. Désolé pour mon anglais.