Log4Net的RollingFileAppender生成重复日志

3

我有一个运行在单个服务器上的WCF服务,使用Log4net通过INFO和WARN级别的日志条目来跟踪使用情况。使用以下非常标准的配置的RollingFileAppender:

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="\\mylocation\data\PRD\myApp\MyService"/>
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="-yyyy-MM-dd'.log'" />
      <staticLogFileName value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
   <root>
      <level value="ALL" />
      <appender-ref ref="RollingLogFileAppender" />
      <appender-ref ref="ADONetAppender_SqlServer" />
    </root> 

我还使用了ADONetAppender,该记录器接收重定向的“WARN”级别数据,并通过存储过程将其写入SQL服务器中的DB表。由于配置有点长,我已省略它以提高可读性。
我在我们的开发和测试环境中设置了这个,在那里它一直运行得很好。但在产品环境中,它似乎会生成重复的日志文件。第一个文件按照我的指定模式命名,即“logfile-yyyy-mm-dd.log”。第二个文件看起来是第一个文件的补充,日期模式被重复,即“logfile-yyyy-mm-dd.log.-yyyy-mm-dd.log”。
更有趣的是,两个文件中包含的条目会在时间上重叠。文件1可能包含从早上8点到中午12点的条目,文件2也会包含同一时间段内的条目。这些条目不是重复的,它们由服务的不同用户生成。文件1和2的副本可以是任何大小,因此这不是到达大小或日期/时间阈值并生成下一个所需日志文件的问题。
DB表项包含所有预期的行,每个日志文件中都包含一些行。这些行仅由WARN级别日志生成,每个日志文件中都会出现一些WARNings。
我已经向我们商店中精通log4net的人反馈了这个问题,但没有人知道是什么导致了这个重复文件的行为。感谢Stackland提供的任何想法。
3个回答

0
我发现这种情况发生在另一个线程或进程锁定了被记录的文件时。
我猜测Log4Net创建另一个文件是因为它无法记录到配置的日志文件,因此创建一个新文件并记录到其中,但我必须查看log4net代码才能确定这个假设。
尝试添加


<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

将MinimalLock应用于appender元素以最小化锁定量。但请注意,使用MinimalLock会带来额外的开销:http://logging.apache.org/log4net/release/sdk/log4net.Appender.FileAppender.MinimalLock.html


0
你的日期格式不应该在后面加上.log。我也不确定为什么在根中声明了两个附加器。考虑到你配置文件的其余部分,你应该能够完全摆脱根,因为它没有任何作用(假设你没有更多的内容不在示例中)。

谢谢,我会检查这些点。我怀疑它们不是重复日志文件的原因,因为在我们的开发和测试环境中,相同的设置并不会产生第二个文件。 - G Wood
@GSW 是的,我并不保证他们会解决这个问题。然而,它们不应该影响日志记录,如果确实有影响,那可能是一种不希望出现的方式。 - evanmcdonnal

0

我曾经遇到过同样的问题。

我确认这是一个权限问题。在我的情况下,日志文件由两个不同的帐户生成(从计划任务和有时通过控制台手动运行),并且在这种情况下,文件名具有重复的日期模式。

将权限重置为两个用户(计划进程用户和交互用户)后,问题就不再重复出现了。

问候, Michele


这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。如果您想在此问题获得新的答案时得到通知,您可以关注此问题。一旦您拥有足够的声望,您还可以添加悬赏以吸引更多关注。- 来自审核 - Eyeslandic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接