【发布时间】: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