2009-04-06 4 views
4

Ich führe Visual Studio 2008 aus - und habe ein Problem mit log4net Logging (v1.2.10). Ich habe ein kleines Konsolen-Testprogramm mit einer einzigen Protokollanweisung. Ich habe log4net für RollingLogFileAppender und ConsoleAppender konfiguriert.log4net loggt nur, wenn es im Debugger von Visual Studio ausgeführt wird

Wenn ich die kompilierte exe von der Befehlszeile ausführen, sehe ich die korrekte Erstellung der Protokolldatei in meinem Laufzeitverzeichnis. Die Protokolldatei wird erstellt (oder angehängt, wenn sie existiert), aber die einzige Ausgabe ist die konfigurierte [Kopfzeile] und [Fußzeile]. Es gibt keine Ausgabe an die Konsole.

Jedoch, wenn ich unter dem Debugger ausgeführt werde, wird die Protokollmeldung sowohl in der Protokolldatei als auch auf der Konsole angezeigt. Folgende ist meine log4net-Konfiguration:

<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 für mich in der Antwort auf seine eigene Frage lachen –

Antwort

1

Es funktioniert jetzt, aber das Geheimnis bleibt. Anscheinend ist ein Magen voller chinesischer Büffets die einzige Lösung für ein Problem wie dieses, denn sobald ich eins hatte, ging das Problem weg.

Mein Testprogramm war eine einzelne Datei mit

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

Als ich ursprünglich das Problem hatte, war ich in Main() die Protokollierung zu tun. Danach habe ich eine Methode für die Klasse Test erstellt, die Klasse Test in Main instanziiert und die Protokollierung in die Methode verschoben. Dies behebt das Problem:

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

Dies ist immer noch nicht eindeutig. Ich bewegte es zurück, so wie es ursprünglich war und es begann zu arbeiten. Also, ich muss daraus schließen, dass die Antwort auf dieses Rätsel ist: Versuchen Sie nicht zum ersten Mal log4net Testprogramme ohne einen Bauch voll von chinesischem Essen.

+0

Ich habe das gleiche Problem - kein chinesisches Essen in meiner Stadt :( – UpTheCreek

2

Diese Theorie eine Strecke sein könnte, aber haben dafür gesorgt, dass die app.config in den Ordner kopiert wurde, in dem die ausführbare Datei ist? App.config muss dorthin kopiert werden, wo sich die ausführbare Ausgabedatei befindet, und Sie müssen sie auch in <Executyname>.config umbenennen. Wenn Ihre ausführbare Datei MyProgram.exe lautet, muss sich config in MyProgram.exe.config befinden.

+0

Danke für die schnelle Antwort und Vernunftprüfung ... die app.config wird richtig behandelt. – moomi

1

Ich hatte das gleiche Problem, und ich war clickonce Bereitstellung.

Ich habe festgestellt, dass ich log4net.xml in Projekteigenschaften> Veröffentlichen> ApplicationFiles hinzufügen und diese log4net.xml als Datendatei erstellen muss.

Verwandte Themen