使用async/await异步任务时NLog时间戳重复,如何获取真实时间戳?
你遇到的日志时间戳完全一致的问题和async/await异步结构没有直接关联:await 关键字前的代码逻辑都会在调用线程同步执行,你给出的三条日志对应的代码没有任何阻塞操作,整体执行耗时远低于1毫秒,毫秒级的时间戳自然无法体现出时间差。
如果业务需要更高精度的时间戳,可以通过修改NLog配置启用高精度时间源实现,配置方式如下:
配置文件方式(nlog.config)
在根节点<nlog>上添加time属性:
<nlog time="HighResolution"> <!-- 其余原有配置保持不变 --> </nlog>
代码配置方式
在程序初始化NLog的逻辑中添加高精度时间源配置:
LogManager.Setup() .SetupLogFactory(factory => { factory.TimeSource = NLog.Time.TimeSource.HighResolution; });
额外说明
- 启用高精度时间源会轻微提升CPU占用,非必要场景不建议开启。如果只是需要区分调用链路顺序,更建议给日志添加链路追踪ID(TraceId)来关联整个调用流程,可靠性远高于时间戳。
- 注意不要修改日志Layout中
${date}的默认行为,${date}默认取的是日志事件创建时间,如果你误配置为日志写入时间,异步批量写场景下也会出现时间戳一致的问题。
内容的提问来源于stack exchange,提问作者To Wa
相关产品推荐
相关产品推荐

