Log4net日志记录不适用于并行线程

时间:2016-03-22 18:03:13

标签: c# log4net

我在随机数上使用基本的Parallel.Foreach循环来使用log4net记录数字本身。

这是我在并行线程上记录5000条消息的代码

            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);
            });

但最后只能在日志文件中看到1600条消息。

这是log4net的已知问题吗?或者我在这里做错了什么?

我在基于Answer的cofig中使用了以下设置,但仍然相同。

<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版本:1.2.15.0

1 个答案:

答案 0 :(得分:0)

您正在写入GlobalContext,我想您需要写入ThreadLogicalContext,而不是按照您想要的方式运行。

相关问题