213 votes

Comment trouver les problèmes de log4net

J'utilise log4net tout le temps, mais une chose que je n'ai jamais comprise, c'est comment dire ce qui se passe à l'intérieur. Par exemple, j'ai un appender de console et un appender de base de données dans mon projet. J'ai apporté quelques modifications à la base de données et au code, et maintenant l'appender de base de données ne fonctionne plus. Je vais finir par comprendre pourquoi, mais cela m'aiderait beaucoup si je pouvais voir ce qui se passe dans log4net.

Est-ce que log4net génère une sorte de sortie que je peux visualiser pour essayer de déterminer la source de mon problème ?

320voto

David Espart Points 3608

Vous devez d'abord définir cette valeur dans le fichier de configuration de l'application :

<configuration>
   <appSettings>
      <add key="log4net.Internal.Debug" value="true"/>
   </appSettings>
</configuration>

Ensuite, pour déterminer le fichier dans lequel vous souhaitez enregistrer la sortie, vous pouvez ajouter le code suivant dans le même fichier .config :

<configuration>
...

<system.diagnostics>
    <trace autoflush="true">
        <listeners>
            <add 
                name="textWriterTraceListener" 
                type="System.Diagnostics.TextWriterTraceListener" 
                initializeData="C:\tmp\log4net.txt" />
        </listeners>
    </trace>
</system.diagnostics>

...
</configuration>

Vous pouvez trouver une explication plus détaillée sous Comment activer le débogage interne de log4net ? dans la section Page FAQ de log4net .

11 votes

Assurez-vous simplement que le processus sous lequel votre application est exécutée a les droits sur le chemin où vous voulez créer votre fichier texte de journalisation ( " C:\tmp\log4net.txt "dans l'exemple ci-dessus)

0 votes

C'est l'astuce manquante pour trouver ce qui se passe dans mon application merci :D

4 votes

On dirait que le débogage interne n'a pas d'horodatage.

50voto

Bolo Points 1384

Si vous utilisez un fichier de configuration log4net, vous pouvez également activer le débogage en changeant le noeud supérieur en :

<log4net debug="true">

Cela fonctionnera une fois que la configuration sera rechargée et en supposant que votre écouteur de trace est correctement configuré.

10 votes

Une fois cet indicateur activé, vous pourrez voir les journaux de diagnostic de log4net dans la fenêtre de sortie de Visual Studio.

28voto

JP Toto Points 942

En plus de la réponse ci-dessus, vous pouvez utiliser cette ligne pour voir le journal en temps réel au lieu du c : \tmp\log4net.txt sortie.

log4net.Util.LogLog.InternalDebugging = true;

Par exemple, dans une application de type console, vous pouvez ajouter cette fonction et observer la sortie en temps réel. C'est un bon moyen de déboguer log4net dans un petit harnais de test pour voir ce qui se passe avec l'appender que vous testez.

10voto

Barrakoda Points 175

Assurez-vous que l'application racine où se trouve votre point d'entrée enregistre quelque chose dans log4net. Donnez-lui l'un de ces éléments :

private static ILog logger = LogManager.GetLogger(typeof(Program));
static void Main(string[] args)
{
    logger.InfoFormat("{0} v.{1} started.", Assembly.GetExecutingAssembly().GetName().Name, Assembly.GetExecutingAssembly().GetName().Version.ToString());

Avec la 2.0.8, j'ai eu une situation intéressante. J'ai créé un projet de bibliothèque et un projet exe de test qui devait faire la démonstration de ses capacités. Le projet de bibliothèque était configuré pour utiliser Log4net, tout comme le projet exe. Le projet exe utilisait l'attribut assemblyinfo pour enregistrer la configuration, mais je n'obtenais aucune sortie de journalisation ni sur la console ni dans le fichier journal. Lorsque j'ai activé la journalisation de débogage interne de Log4net, j'ai obtenu quelques messages internes écrits sur la console, mais toujours aucun de mes journaux normaux. Aucune erreur n'a été signalée. Tout a commencé à fonctionner lorsque j'ai ajouté le code ci-dessus à mon programme. Log4net était par ailleurs correctement configuré.

2 votes

A sauvé le mien aussi :-)

0 votes

Euh, j'ai eu le même problème, il semble qu'il y ait des exigences sur l'assemblage qui utilise log4net en premier - je ne suis pas sûr de ce qu'elles sont exactement, peut-être les bibliothèques référencées ou les choses qui sont utilisées dans la configuration (dans mon cas, j'utilise un appender personnalisé, donc c'est probablement cela - l'assemblage qui enregistre en premier, doit également inclure le code personnalisé nécessaire lors du chargement de la configuration).

0 votes

Merci beaucoup, cela m'a aussi aidé. C'est un sacré piège !

3voto

StuartN Points 21

Si le journal interne ne vous donne pas assez d'informations, il est très facile de construire et de déboguer l'application code source . Si vous ne voulez pas mélanger cela avec votre projet de développement, ajoutez une simple application console qui ne fait qu'enregistrer un message, copiez l'application log4net.config à cette application, et déboguer la classe en question.

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