首页 > 解决方案 > log4net中的时间戳,是生成日志条目的时间还是写入文件的时间?

问题描述

我们正在测试通过多种 IPC 方法相互通信的几个软件组件之间的整体时间延迟。由于某些组件不是我们编写的,因此我们拥有的唯一工具是由生成的日志文件log4net(这些组件是在 中编写的C#)。我们已经配置了滚动文件记录器,其配置如下所示:

<appender name="RollingPerfAppender" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="D:\Logs\my_log.log"/>
  <appendToFile value="true"/>
  <rollingStyle value="Size"/>
  <maxSizeRollBackups value="-1"/>
  <maximumFileSize value="20MB"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.ffffff}, %-5level, server, %-25.25logger, &quot;%message&quot;%newline"/>
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="FATAL" />
    <levelMax value="FATAL" />
  </filter>
</appender>

所以现在日志项如下所示:

2021-06-10 10:39:52.987672, ERROR, server, "MY CUSTOM LOG GENERATED ON 2021-06-10 10:39:52.885126"

现在我的问题是,它的 tiemstamp (2021-06-10 10:39:52.987672) 是什么?是在代码中生成日志条目的时候,还是写入文件的时候?我问是因为在这个自定义日志中,我实际上将执行时间放在了日志消息中(2021-06-10 10:39:52.885126),我们可以看到时间差高达 100 毫秒(我尝试设置ImmediateFlushTrue和将其更改为False, 差别不大)。但是 100ms 太大了,我们无法分析性能,因为还有很多其他日志项的日志消息不受我们控制,所以我们只能使用日志本身的时间戳。但是,如果它们不是(或非常接近)代码中生成这些日志的时间,那么整个分析将不够准确(整个延迟大约为 200 毫秒,因此日志中 100 毫秒的不准确性太大了)。

那么如何使日志项上的时间戳(接近)它在代码中生成的时间?

标签: c#log4net

解决方案


推荐阅读