我有一个运行在单个服务器上的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,它接收重定向的“警告”级数据,并通过存储过程将其写入SQL server中的DB表。这个配置有点长,为了可读性,我省略了它。
我在我们的Dev和TST环境中有了这个设置,在那里它运行得很好。在PRD环境中,似乎会生成重复的日志文件。第一个是根据我指定的模式命名的,即"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的任何想法。
发布于 2012-05-18 00:55:53
你的日期模式后面不应该有.log。我也不确定为什么在根中声明了两个附加器。考虑到配置的其余部分,您应该能够完全删除根目录(假设您没有本例中没有的根目录)。
发布于 2014-01-15 19:26:30
我发现,当正在登录的文件被另一个线程或进程锁定时,就会发生这种情况。
我假设Log4Net创建了另一个文件,因为它不能记录到已配置的日志文件中,因此创建了一个新文件并记录到该文件中,但我必须查看log4net代码才能确定这一假设。
尝试添加
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />添加到附加器元素,以最大限度地减少锁定量。只需注意,使用MinimalLock:http://logging.apache.org/log4net/release/sdk/log4net.Appender.FileAppender.MinimalLock.html会带来额外的开销
https://stackoverflow.com/questions/10639682
复制相似问题