Log4Net RollingFileAppender生成重复日志

Log4Net RollingFileAppender生成重复日志,log4net,duplicates,rollingfileappender,Log4net,Duplicates,Rollingfileappender,我在一台服务器上运行一个WCF服务,使用Log4net通过信息和警告级别的日志条目跟踪使用情况。使用具有以下非常标准配置的RollingFileAppender: 我还使用ADONetAppender,它接收重定向的警告级别数据,并通过存储过程将其写入SQL server中的DB表。这个配置有点长,所以为了可读性我省略了它 我在我们的Dev和TST环境中有这个设置,它一直运行良好。在PRD环境中,它似乎会生成重复的日志文件。第一个根据我指定的模式命名,即logfile-yyyy-mm-dd.lo

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

我还使用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表条目包含所有预期的行,其中一些包含在每个日志文件中。这些行仅由警告级别日志记录生成,并且一些警告显示在每个日志文件中


我从我们店里一些精通log4net的人那里了解到了这一点,但是没有人知道是什么导致了这种重复文件行为。斯塔克兰的任何想法都值得赞赏。

你的约会模式不应该有。在它之后记录。我也不确定为什么在根中声明了两个appender。您应该能够完全摆脱根目录,考虑到配置的其余部分,假设您没有更多示例中没有的根目录,那么根目录就没有意义了。

日期模式不应该在根目录之后有.log。我也不确定为什么在根中声明了两个appender。您应该能够完全摆脱根目录,考虑到配置的其余部分,假设您没有示例中没有的根目录,那么它就没有任何意义了。

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

我假设Log4Net创建了另一个文件,因为它无法登录到配置的日志文件,因此创建了一个新文件并登录到它,但我必须通过Log4Net代码来确保这个假设

尝试添加

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

添加到appender元素以最小化锁定量。请注意,使用MinimalLock会带来额外的开销:

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

我假设Log4Net创建了另一个文件,因为它无法登录到配置的日志文件,因此创建了一个新文件并登录到它,但我必须通过Log4Net代码来确保这个假设

尝试添加

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

添加到appender元素以最小化锁定量。请注意,使用MinimalLock会带来额外的开销:

谢谢,我将检查以下几点。我怀疑它们不是重复日志文件的原因,因为相同的设置不会在我们的开发和测试环境中生成第二个文件。@GSW是的,我不认为它们会解决问题。但是,它们不应该影响日志记录,如果它们影响日志记录,则可能会以不希望的方式进行。谢谢,我将检查这些要点。我怀疑它们不是重复日志文件的原因,因为相同的设置不会在我们的开发和测试环境中生成第二个文件。@GSW是的,我不认为它们会解决问题。但是,它们不应该影响日志记录,如果它们影响日志记录,则可能会以不希望的方式进行。