如果从工作线程调用,log4net info会挂起控制台应用程序

时间:2016-04-27 16:45:22

标签: c# multithreading log4net

我遇到一个问题,其中log4net挂起在info语句中。我有一个C#多线程控制台应用程序。主线程创建了几个工作线程,使用log4net进行日志记录,写入文件和控制台。记录器是某个基类中的静态变量。在执行应用程序的某个随机点,记录器将挂起在info语句中,但仅在某些计算机上。我遇到一些关于罕见情况的帖子,在特定的系统设置中,日志写入缓冲区将填充,log4net将等待它清空,什么都不会发生。因此应用程序挂起。在我的情况下,记录器写入文件,但随后停止,消息不会到达控制台。按控制台上的ctrl-c实际上会导致应用程序正常继续。

我尝试让记录器成为我的类的成员,而不是按照此处的建议使其保持静态:http://apache-logging.6191.n7.nabble.com/Multi-threaded-ASP-NET-application-not-working-td21782.html

但这只会导致我的应用程序挂起第一个日志声明。

这是挂起的电话:

_logger.Info($"Generation: {_ea.CurrentGeneration}/{_maxGenerations}, " +
          $"Time/gen: {timePerGen} ms, Est. time remaining: {Utilities.TimeToString(timeRemainingEst)} " +
          $"Fitness - Max: {_ea.Statistics._maxFitness:F4} Mean: {_ea.Statistics._meanFitness:F4}, " +
          $"Complexity - Max: {_ea.Statistics._maxComplexity:F0} Mean: {_ea.Statistics._meanComplexity:F2} " +
          $"Champ: {_ea.CurrentChampGenome.Complexity:F0} Strategy: {_ea.ComplexityRegulationMode}, " +
          $"Specie size - Max: {_ea.Statistics._maxSpecieSize:D} Min: {_ea.Statistics._minSpecieSize:D}, " +
          $"Generations since last improvement: {_ea.CurrentGeneration - _lastMaxFitnessImprovementGen}"
          );

是否有人遇到类似问题并知道如何解决或解决方法?

这是请求的log4net配置

<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file type="log4net.Util.PatternString" value="ENTM/%property{name}/%property{id}/%property{count}/log.txt" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%utcdate{yyyy-MM-dd HH:mm:ss} [%thread] %-5level:  %message%newline" />
    </layout>
  </appender>

  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <target value="Console.Error" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%utcdate{yyyy-MM-dd HH:mm:ss} [%thread] %-5level:  %message%newline" />
    </layout>
  </appender>

  <root>
    <level value="DEBUG" />
    <appender-ref ref="FileAppender" />
    <appender-ref ref="ConsoleAppender" />
  </root>
</log4net>

0 个答案:

没有答案