Log4net:滚动文件操作:失败的源不存在

时间:2016-03-16 05:42:43

标签: c# multithreading

我们在多线程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论坛上使用不同的日期模式,但更改日期模式并不能解决所有人的问题。我们想知道解决这个问题的完整证明方法是什么。

感谢。

1 个答案:

答案 0 :(得分:0)

我做完一些测试后发现这个错误。我们将日志文件设置为每天滚动。为了进行测试,我让系统为“今天”编写了一堆文件。然后,我将计算机上的日期提前一天并重新运行。正如预期的那样,日志文件被重命名为前一天,而新的日志文件又被改写为新的一天。

测试成功!

我将日期重新设置为正确的日期,然后重新开始。那是我收到此错误的时间。据我所知,它试图错误地滚动前一天的文件。

要解决该问题,我只是清除了所有日志文件,并使其从头开始。