c# - 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, "%message"%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 毫秒(我尝试设置ImmediateFlush
为True
和将其更改为False
, 差别不大)。但是 100ms 太大了,我们无法分析性能,因为还有很多其他日志项的日志消息不受我们控制,所以我们只能使用日志本身的时间戳。但是,如果它们不是(或非常接近)代码中生成这些日志的时间,那么整个分析将不够准确(整个延迟大约为 200 毫秒,因此日志中 100 毫秒的不准确性太大了)。
那么如何使日志项上的时间戳(接近)它在代码中生成的时间?
解决方案
推荐阅读
- android - 为什么 LiveData 不更新?(安卓、科特林)
- swiftui - 为什么这个 SwiftUI 视图会初始化两次?
- javascript - 如何隐藏mysql数据中的条形图而不被删除
- ubuntu - 从 ubuntu 中的文件中删除空格
- r - 使用 facet_grid_sc 产生不同比例的问题
- node.js - 为什么我在 Ubuntu 18.04.4 LTS 上运行 Puppeteer 时出错?
- python - Protocol Buffers 重复字段
- angular - x 秒后自动关闭 Angular 对话框
- sql - 每年的事件 ID
- java - 具有默认命名空间且没有前缀的 xpath