2012-05-17 54 views
1

我有一个WCF服务运行在单个服务器上,使用Log4net通过INFO和WARN级别日志条目跟踪使用情况。使用RollingFileAppender进行具有以下非常标准配置:Log4Net 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服务器将其写入到数据库表。这个配置有点长,所以为了便于阅读,我省略了它。

我在我们的开发和TST环境中已经运行良好的设置。在PRD环境中,它似乎会生成重复的日志文件。第一个按照我指定的模式命名,即“logfile-yyyy-mm-dd.log”。第二个文件看起来像是第一个文件的附加文件,日期格式重复,即“logfile-yyyy-mm-dd.log.-yyyy-mm-dd.log”。

使这个更有趣的是,两个文件中包含的条目按时间重叠。文件1可能具有从上午8点到上午12点的条目,文件2也将包含来自相同时间段的条目。条目不重复,它们由服务的不同用户生成。文件1和文件2的副本几乎可以任意大小,因此这不是达到大小或日期/时间阈值并生成下一个必需的日志文件的问题。

数据库表条目包含所有预期的行,其中一些包含在每个日志文件中。这些行仅由WARN级别日志记录生成,并且每个日志文件中都会显示一些警告。

我已经反弹了一些在我们的商店log4net精明的人,但没有人有什么可能会导致这种重复的文件行为的好主意。来自Stackland的任何想法都很感激。

回答

0

您的日期模式不应该有.log后面。我也不确定你为什么在根中声明了两个appender。你应该能够彻底摆脱根源,因为你的配置其余部分没有用处(假设你没有更多的东西)。

+0

谢谢,我将检查这些点。我怀疑他们不是重复日志文件的原因,因为相同的设置不会在我们的开发和测试环境中生成第二个文件。 –

+0

@GSW是的,我没有声称他们会解决这个问题。但是,它们不应该影响伐木,如果它们这样做,它可能会以不希望的方式。 – evanmcdonnal

0

我发现,当被记录的文件被另一个线程或进程锁定时,会发生这种情况。

我假设Log4Net创建其他文件,因为它无法登录到配置的日志文件,从而创建一个新文件并记录到它,但我必须通过log4net代码来确保假设。

尝试增加

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

到附加器元件,以尽量减少锁定的量。要知道,有使用MinimalLock相关的额外开销:http://logging.apache.org/log4net/release/sdk/log4net.Appender.FileAppender.MinimalLock.html