2016-03-22 8 views
0

Ich benutze grundlegende Parallel.Foreach Schleife auf Zufallszahlen, um die Nummer selbst mit log4net zu protokollieren.Log4net Protokollierung funktioniert nicht mit parallelen Threads

Hier ist mein Code 5000 Nachrichten auf parallele Threads

  Logger logger = new Logger(); 
      var numbers = Enumerable.Range(1, 5000); 
      ParallelOptions parallelOptions = 
        new ParallelOptions() 
        { 
         MaxDegreeOfParallelism = Environment.ProcessorCount 
        }; 
      Parallel.ForEach(numbers, parallelOptions, number => 
      { 
       logger.Write(Level.Info, "main method", "" + number + "", loggingParameters); 
      }); 

Aber am Ende nur in der Protokolldatei 1600 Nachrichten zu protokollieren.

Ist dies ein bekanntes Problem mit log4net? oder mache ich hier etwas falsch?

Ich habe die folgende Einstellung in der cofig basierend auf Answer verwendet und es ist immer noch das gleiche.

<param name="ImmediateFlush" value="true" /> 

<log4net debug="false"> 

    <appender name="GeneralRollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <file type="log4net.Util.PatternString" value="Logs/All/all_" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Date" /> 
     <datePattern value="yyyyMMdd'.log'" /> 
     <maxSizeRollBackups value="10" /> 
     <staticLogFileName value="false" /> 
     <param name="ImmediateFlush" value="true" /> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMin value="INFO" /> 
     <levelMax value="INFO" /> 
     </filter> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %message%newline" /> 

     </layout> 
    </appender> 
    <root> 
     <appender-ref ref="GeneralRollingFileAppender" /> 
    </root> 
    </log4net> 

Log4net Version: 1.2.15.0

+0

Haben Sie das versucht? http://StackOverflow.com/a/2045992/26226 – jrummell

+0

Bitte zeigen Sie Ihre Datei appender config, insbesondere die 'lockingModel', die Sie verwenden, und geben Sie an, welche Version von log4net Sie verwenden. – stuartd

+0

@jrummelli hat es versucht, aber es gibt keine gepufferten Nachrichten zum eigentlichen Leeren. So erreicht es nicht gepuffert.Flush(); – Vivekh

Antwort

0

Sie auf die GlobalContext schreiben, ich denke, Sie stattdessen auf die ThreadLogicalContext schreiben müssen, wie Sie wollen, um es zu arbeiten.

+0

Ich wechselte zu LogicalThreadContext dann habe ich einige andere Probleme. Ich bin nicht in der Lage, die benutzerdefinierten Feldeigenschaften im Protokoll zu sehen, und auch das erste Problem besteht weiterhin in der Lage, nur ein Protokoll zu sehen 2016-03-23 ​​11: 38: 16.425 [10] INFO Logger (null) (null) (null) - z – Vivekh

Verwandte Themen