我们在多线程WCF Windows服务中使用log4net已有3年左右的时间。我们最近遇到了我们的服务没有响应/几次挂机状态。在分析当时服务的崩溃转储时,我们遇到了在滚动文件操作期间我们的一个线程失败。失败线程的堆栈跟踪如下:
log4net.Util.LogLog.EmitErrorLine(System.String)
log4net.Util.LogLog.Warn(System.Type, System.String)
log4net.Appender.RollingFileAppender.RollFile(System.String, System.String)
log4net.Appender.RollingFileAppender.RollOverTime(Boolean)
log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()
log4net.Appender.RollingFileAppender.Append(log4net.Core.LoggingEvent)
log4net.Appender.AppenderSkeleton.DoAppend(log4net.Core.LoggingEvent)
....
....
在经历上述堆栈跟踪引发的错误时,我们遇到以下错误消息:
log4net:WARN Cannot RollFile [....] -> [....]. Source does not exist
所有其他线程都在等待以下log4net方法:
log4net.Appender.AppenderSkeleton.DoAppend(log4net.Core.LoggingEvent)
log4net.Util.AppenderAttachedImpl.AppendLoopOnAppenders(log4net.Core.LoggingEvent)
....
....
滚动文件日期模式如下:
<datePattern value=".yyyyMMdd-HH".log"">
我们无法理解这里导致服务无响应的错误。如果发生某些错误,滚动文件操作是否会导致正在使用它的线程进入无响应状态?我们已经通过其他帖子告诉我们在log4net论坛上使用不同的日期模式,但更改日期模式并不能解决所有人的问题。我们想知道解决这个问题的完整证明方法是什么。
感谢。
答案 0 :(得分:0)
我做完一些测试后发现这个错误。我们将日志文件设置为每天滚动。为了进行测试,我让系统为“今天”编写了一堆文件。然后,我将计算机上的日期提前一天并重新运行。正如预期的那样,日志文件被重命名为前一天,而新的日志文件又被改写为新的一天。
测试成功!
我将日期重新设置为正确的日期,然后重新开始。那是我收到此错误的时间。据我所知,它试图错误地滚动前一天的文件。
要解决该问题,我只是清除了所有日志文件,并使其从头开始。