【问题标题】:Log4net : Rolling File Operation : Failing with Source does not existLog4net:滚动文件操作:源不存在失败
【发布时间】:2016-03-16 05:42:43
【问题描述】:

自过去 3 年左右以来,我们一直在我们的多线程 WCF Windows 服务中使用 log4net。我们最近遇到了几次我们的服务变得无响应/进入挂起状态。在分析当时服务的崩溃转储时,我们遇到了我们的一个线程在滚动文件操作期间失败了。失败线程的堆栈跟踪如下:

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

谢谢。

【问题讨论】:

标签: c# multithreading


【解决方案1】:

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

测试成功!

我将日期重置为正确的日期并重新开始。那是我得到这个错误的时候。据我所知,它试图错误地滚动前一天的文件。

为了解决这个问题,我只是清除了所有的日志文件,让它从头开始。

【讨论】:

    【解决方案2】:

    在玩弄了我的文件附加程序的不同选项后,我遇到了这个问题。

    解决方案:删除所有创建的日志文件(具有不同的文件格式,包括时间戳)。

    感谢@markdotnet,他给了一个很好的提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      相关资源
      最近更新 更多