Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Log4net日志记录不适用于并行线程_C#_Log4net - Fatal编程技术网

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

C# Log4net日志记录不适用于并行线程,c#,log4net,C#,Log4net,我正在使用基本的Parallel.Foreach随机数循环,以使用log4net记录数字本身 下面是我在并行线程上记录5000条消息的代码 Logger logger = new Logger(); var numbers = Enumerable.Range(1, 5000); ParallelOptions parallelOptions = new ParallelOptions(

我正在使用基本的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的已知问题吗?还是我做错了什么

我在基于的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


您正在向GlobalContext写入内容,我想您需要向ThreadLogicalContext写入内容,以使其按您想要的方式工作。

我更改为LogicalThreadContext,然后我遇到了一些其他问题。我无法在日志中看到自定义字段属性,而且第一个问题仍然存在,仍然只能看到一个日志2016-03-23 11:38:16425[10]信息记录器(null)(null)(null)-您尝试过这个吗?请显示您的文件appender配置,特别是您正在使用的
lockingModel
,并指定您正在使用哪个版本的log4net。@jrummelli尝试了它,但实际上没有缓冲消息要刷新。所以它没有到达buffered.Flush();我发现版本1.2.11.0的LogicalThreadContext被破坏,最终使用System.Runtime.Remoting.Messaging.CallContext.LogicalGetData和LogicalSetData解决了这个问题,这是因为我不直接访问log4net,而是通过自己的包装器(出于其他原因)实现的。