2009-04-06 9 views
4

Je suis en cours d'exécution Visual Studio 2008 - et j'ai un problème avec la journalisation log4net (v1.2.10). J'ai un petit programme de test de console avec une seule instruction de journal. J'ai configuré log4net pour RollingLogFileAppender et ConsoleAppender.log4net uniquement les journaux en cours d'exécution dans le débogueur Visual Studio

Lorsque j'exécute l'exe compilé à partir de la ligne de commande, je vois la création correcte du fichier journal dans mon répertoire d'exécution. Le fichier journal est créé (ou ajouté à, lorsqu'il existe), mais la seule sortie est [En-tête] et [Pied de page] comme configuré. Il n'y a pas de sortie à la console.

Toutefois, lorsque je suis exécuté sous le débogueur, le message de journal s'affiche à la fois dans le fichier journal et sur la console. Voici ma configuration log4net:

<log4net> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
    <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" /> 
    </appender> 
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="quicktest-log-" /> 
    <appendToFile value="true" /> 
    <immediateFlush value="true" /> 
    <datepattern value="yyyy-MM-dd" /> 
    <maxSizeRollBackups value="100" /> 
    <maximumFileSize value="1048576" /> 
    <rollingStyle value="Composite" /> 
    <staticLogFileName value="false" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <header value="[Begin Quicktest program log]&#13;&#10;" /> 
     <footer value="[End Quicktest program log]&#13;&#10;" /> 
     <conversionPattern value="%date{HH:mm:ss} [%thread] %-5level %logger: %message%newline" /> 
    </layout> 
    </appender> 
    <root> 
    <level value="ALL" /> 
    <appender-ref ref="ConsoleAppender" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
    </root> 
</log4net> 
+0

+1 pour me faire rire dans la réponse à sa propre question –

Répondre

1

Cela fonctionne maintenant, mais le mystère demeure. Apparemment, un buffet chinois est la seule solution à un problème comme celui-ci, car une fois que j'en avais un, le problème disparaissait.

Mon programme d'essai était un seul fichier avec

class Test 
{ 
    static void Main (string[] args) 
    { 
     . 
     . // some logging attempted here. 
     . 
    } 
} 

Quand j'ai eu le problème à l'origine, je faisais l'exploitation forestière dans les Main(). Ensuite, j'ai créé une méthode sur la classe Test, la classe instanciée Test dans Main, et déplacé la journalisation à la méthode. Cela a éliminé le problème:

class Test 
{ 
    static void Main (string[] args) 
    { 
     var p = new Test(); 
     p.Go(); 
    } 
    public void Go() 
    { 
     . // some logging here. 
    } 
} 

Ceci est encore peu concluant. Je l'ai déplacé comme il était à l'origine et ça a commencé à fonctionner. Donc, je dois conclure que la réponse à cette énigme est: N'essayez pas les programmes de test de log4net pour la première fois sans une bonne dose de nourriture chinoise.

+0

J'ai le même problème - pas de nourriture chinoise dans ma ville si :( – UpTheCreek

2

Cette théorie pourrait être un tronçon, mais avez-vous assuré que le app.config a été copié dans le dossier où votre exécutable est? App.config doit être copié à l'emplacement où se trouve l'exécutable de sortie, et vous devez également le renommer <executablename> .config, donc si votre exécutable est MyProgram.exe, la configuration doit être dans MyProgram.exe.config.

+0

Merci pour la réponse rapide et la vérification d'intégrité ... l'application.config est traitée correctement. – moomi

1

J'ai eu le même problème, et je faisais le déploiement de clickonce.

J'ai trouvé que j'avais besoin d'ajouter log4net.xml dans les propriétés du projet> Publier> ApplicationFiles et de faire de ce fichier log4net.xml un fichier de données.

Questions connexes