2016-07-21 3 views
0

Ich habe eine MVC-basierte C# Windows Forms-Anwendung.Klasse loggt nicht in eine Datei mit log4net

<log4net> 
    <root> 
     <level value="ALL"/> 
     <appender-ref ref="LogConsoleAppender"/> 
     <appender-ref ref="RollingLogFileAppender"/> 
    </root> 
    <appender name="LogConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="QAC.Source.Services.Log.LogPatternLayout"> 
     <conversionPattern value="%date %level [Thread: #%thread] %message    [%logger -&gt; %M]%newline"/> 
     </layout> 
    </appender> 
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="logs/QAC_"/> 
     <datePattern value="yyyy-MM-dd_HH-mm-ss'.log'"/> 
     <staticLogFileName value="false"/> 
     <appendToFile value="false"/> 
     <rollingStyle value="Date"/> 
     <maxSizeRollBackups value="50"/> 
     <maximumFileSize value="10MB"/> 
     <layout type="QAC.Source.Services.Log.LogPatternLayout"> 
     <conversionPattern value="%date %level [Thread: #%thread] %message    [%logger -&gt; %M]%newline"/> 
     </layout> 
    </appender> 
    </log4net> 

Im Hauptverfahren in der ersten lin, rufe ich private static ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); und danach habe ich initialisieren mein Hauptservice:: Ich habe die folgende Konfiguration in der Datei app.config bekam

mainService = MainFactory.getMainServiceInstance(); 

Und da ist das Problem. Alle Log-Ausgaben in der main-Methode werden erfolgreich in der Datei und der Konsole sowie in anderen Diensten (darunterliegende Dienste von MainService) protokolliert. Die einzige Klasse, die nicht protokolliert wird, ist der MainService. Die Neugier daran ist, dass das Logging für diese Klasse nach einiger Zeit beginnt. Ich benutze keinen Filter. Ich habe das log4net Debugging eingeschaltet:

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

, aber es gibt zumindest keinen Fehler. Also denke ich, dass die Initialisierung durchläuft. Wenn ich logge, bevor ich den MainService initialisiere, protokolliert er auch zu Konsole und Datei. Nur diese Klasse wird nicht protokolliert.

Jede Hilfe wäre sehr nett. Vielen Dank im Voraus.

Antwort

0

Ich habe die Lösung gefunden. Ich verwende ein benutzerdefiniertes LogPatternLayout, das auch versucht, den MainService zu initialisieren, und so wird der MainService initialisiert, bevor das LogPatternLayout in den Logger gelesen und initialisiert werden kann. Daher erfolgt die Protokollierung nach der Initialisierung des MainService.