Manière correcte de l'utilisation de log4net (enregistreur de nommage)
Il y a deux façons de configuration et l'utilisation de log4net. D'abord, c'est quand je peux configurer mon propre appender et associés logger:
<!-- language: xml -->
<appender name="myLogAppender" type="log4net.Appender.RollingFileAppender" >
<file value="Logs\myLog.log" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level - %message%n" />
</layout>
</appender>
<logger name="myLog">
<level value="All"></level>
<appender-ref ref="myLogAppender" />
</logger>
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 la racine à être aussi détaillé que je veux:
<!-- language: xml -->
<root>
<level value="Error" />
<appender-ref ref="myLogAppender" />
</root>
Et dans ce cas je peux le journal des messages comme ceci:
ILog log = LogManager.GetLogger(typeof(Bar));
log.Info("message");
Les avantages de la deuxième approche est que vous pouvez activer ou désactiver certains des messages à la volée. Mais le problème c'est que je suis en développement dans EPiServer CMS et il a son propre système d'enregistrement qui utilise log4net et si j'ai activé la journalisation info au niveau de la racine, puis beaucoup de journaux système sera écrit.
Comment utilisez-vous log4net? Chaque partie d'un système de l'écrit dans son propre enregistreur, ou tout est écrit en défaut enregistreur, et la configuration décide quoi faire ensuite?
Vous devez vous connecter pour publier un commentaire.
Concernant la façon dont vous les messages de journal dans le code, j'opterais pour la deuxième approche:
Où les messages envoyés dans le journal ci-dessus va être "nommé" à l'aide de la entièrement qualifié de type
Bar
, par exempleL'avantage de cette approche est qu'il est le standard de facto pour l'organisation de l'enregistrement, elle vous permet également de filtrer vos messages de journal par espace de noms. Par exemple, vous pouvez spécifier que vous souhaitez vous connecter niveau de l'INFO message, mais d'élever le niveau de journalisation pour
Bar
spécifiquement pour DÉBOGUER:La possibilité de filtrer votre enregistrement via le nom est une fonctionnalité puissante de log4net, si vous suffit de vous connecter tous vos messages à
"myLog"
, vous perdez une grande partie de cette puissance!Concernant la EPiServer CMS, vous devriez être en mesure d'utiliser l'approche décrite ci-dessus pour spécifier un autre niveau de journalisation pour les CMS et votre propre code.
Pour en savoir plus, voici un codeproject article que j'ai écrit sur l'exploitation forestière:
this.GetType()
?Ma Réponse risque d'être arrivé en retard, mais je pense que ça peut aider les débutants. Vous ne devez pas voir les journaux exécuté à moins que les modifications sont apportées ci-dessous.
2 Fichiers doivent être des changements lorsque vous implémentez Log4net.
À l'intérieur de [app.config] :
Première, sous le titre "configSections", vous devez ajouter ci-dessous les morceau de code;
Puis, sous "configuration" à bloc, vous avez besoin pour écrire ci-dessous morceau de code.(Ce morceau de code est personnalisé selon mon besoin , mais il fonctionne comme un charme.)
À L'Intérieur De Classe D'Appel :
À l'intérieur de la classe où vous allez utiliser cette log4net, vous devez déclarer ci-dessous morceau de code.
Maintenant, vous êtes prêt d'un journal d'appel où vous le souhaitez dans la même classe. Ci-dessous est celui de la méthode, vous pouvez appeler tout en effectuant des opérations.
Au lieu de nommer mon invoquant la classe, j'ai commencé à utiliser les éléments suivants:
De cette façon, je peux utiliser la même ligne de code dans chaque classe qui utilise log4net sans avoir à vous rappeler de changer le code quand je l'ai copier et coller.
Sinon, je pourrais créer un enregistrement de classe, et de toutes les autres classe hérite de ma classe de log.
Inconvénient de la deuxième approche est grande référentiel créé bûcherons. Cette enregistreurs de faire la même chose si la racine est définie et classe les bûcherons ne sont pas définis. Le scénario Standard sur le système de production est à l'aide de quelques bûcherons dédié au groupe de la classe. Désolé pour mon anglais.