2

我在单个服务器上运行 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 服务器中的数据库表。这个配置有点长,所以为了可读性我省略了它。

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

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

DB 表条目包含所有预期的行,其中一些包含在每个日志文件中。这些行仅由 WARN 级别的日志记录生成,并且一些 WARNing 出现在每个日志文件中。

我已经从我们商店的一些 log4net 精明的人那里得到了这个反馈,但是没有人知道可能导致这种重复文件行为的原因。来自 Stackland 的任何想法表示赞赏。

4

2 回答 2

0

Your date pattern shouldn't have .log after it. I also am unsure why you have two appenders declared in the root. You should be able to get rid of the root altogether, given the rest of your config it has no purpose (assuming you don't have more that isn't in the example).

于 2012-05-17T16:55:53.417 回答
0

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

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

尝试添加

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

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

于 2014-01-15T11:26:30.413 回答