Obi*_*obi 5 c# log4net multithreading
我有一个问题,log4net 挂在信息语句上。我有一个 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}"
);
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过类似的问题并知道如何修复它或解决方法?
这是请求的 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>
Run Code Online (Sandbox Code Playgroud)