Я использую log4net в многопоточном сервисе.И в какой-то момент служба неожиданно перестает отвечать.Я проверил дамп процесса и стек ниже.
Это конфигурация приложения:
var roller = new RollingFileAppender();
roller.LockingModel = new MinimalLock();
roller.File = @"logs\Log_Tabsters_" + appName + "_";
roller.DatePattern = "yyyy-MM-dd'.log'";
roller.StaticLogFileName = false;
roller.AppendToFile = true;
roller.RollingStyle = RollingMode.Composite;
roller.Layout = patternLayout;
roller.MaxSizeRollBackups = 10;
roller.MaximumFileSize = "1GB";
roller.ActivateOptions();
var buffer = new BufferingForwardingAppender();
buffer.BufferSize = 100;
buffer.Lossy = false;
buffer.AddAppender(roller);
buffer.ActivateOptions();
hierarchy.Root.AddAppender(buffer);
var console = new ColoredConsoleAppender();
var mappingError = new LevelColors();
mappingError.Level = Level.Error;
mappingError.ForeColor = Colors.White;
mappingError.BackColor = Colors.Red;
console.AddMapping(mappingError);
var mappingWarn = new LevelColors();
mappingWarn.Level = Level.Warn;
mappingWarn.ForeColor = Colors.White;
mappingWarn.BackColor = Colors.Yellow;
console.AddMapping(mappingWarn);
console.Layout = patternLayout;
console.ActivateOptions();
hierarchy.Root.AddAppender(console);
Я вижу, что потоки застряли в DoAppend
трассировка стека составляет
log4net.dll!log4net.Appender.AppenderSkeleton.DoAppend(log4net.Core.LoggingEvent loggingEvent)
log4net.dll!log4net.Util.AppenderAttachedImpl.AppendLoopOnAppenders(log4net.Core.LoggingEvent loggingEvent)
log4net.dll!log4net.Repository.Hierarchy.Logger.CallAppenders(log4net.Core.LoggingEvent loggingEvent)
log4net.dll!log4net.Repository.Hierarchy.Logger.ForcedLog(System.Type callerStackBoundaryDeclaringType, log4net.Core.Level level, object message, System.Exception exception)
log4net.dll!log4net.Repository.Hierarchy.Logger.Log(System.Type callerStackBoundaryDeclaringType, log4net.Core.Level level, object message, System.Exception exception)
log4net.dll!log4net.Core.LogImpl.Warn(object message)
TabstersCore.dll!Tabsters.Logger.AddLog(string module, string log, Tabsters.LogType logType) Line 129