我在单个服务器上运行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 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的副本几乎可以是任何大小,因此这不是达到大小或日期/时间阈值并生成下一个必需日志文件的问题。
数据库表条目包含所有预期的行,其中一些包含在每个日志文件中。这些行仅由WARN级别日志记录生成,并且某些WARNings出现在每个日志文件中。
我已经从我们商店中的一些log4net精明人员那里反过来了,但是没有人知道可能导致这种重复文件行为的原因。来自Stackland的任何想法都表示赞赏。
答案 0 :(得分:0)
你的日期模式之后不应该有.log。我也不确定为什么你在根中声明了两个appender。你应该能够完全摆脱root,因为你的配置的其余部分没有任何意义(假设你没有更多不在示例中)。
答案 1 :(得分:0)
我发现当被记录的文件被另一个线程或进程锁定时会发生这种情况。
我假设Log4Net创建了另一个文件,因为它无法登录到已配置的日志文件,从而创建了一个新文件并记录到它,但是我必须通过log4net代码来确保这个假设
尝试添加
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
到appender元素以最小化锁定量。请注意,使用MinimalLock会产生额外的开销:http://logging.apache.org/log4net/release/sdk/log4net.Appender.FileAppender.MinimalLock.html