You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:45:04