【问题标题】:Nlog timestamp while using tasks使用任务时的 Nlog 时间戳
【发布时间】:2021-12-21 05:09:07
【问题描述】:

我有类似这样的调用结构:

程序 -calls-> Service1.Function1 -calls-> Service2.Function2 -calls-> HTTP 调用

最后有一个 HTTP 调用,所以我所有的调用都是通过 async/await 进行的。

这是一个例子:

        async function1()
        {
            logger.Info("START Function1 with parameters xy");

            logger.Info("CALL Function2 with parameters xy");
            await Service2.Function2();
            logger.Info("RET Function2 with parameters xy");

            logger.Info("END Function1 with parameters xy");
        }

        async function2()
        {
            logger.Info("START Function1 with parameters xy");

            await HTTPClient.Call();

            logger.Info("END Function1 with parameters xy");
        }

使用 NLog 我得到这个日志

2021-11-04 14:44:12.6996|INFO |Service1.Function1 : START  Function1 with Parameters: xy
2021-11-04 14:44:12.6996|INFO |Service1.Function1 : CALL   Function2 with Parameters: xy
2021-11-04 14:44:12.6996|INFO |Service2.Function2 : START  Function2 with Parameters: xy
2021-11-04 14:44:17.7004|ERROR|Service2.Function2 : A task was canceled.

如果您查看时间戳,它会始终显示完全相同的时间戳,直到发出等待的 HTTP 调用。我认为这与异步(async/await)结构有关。如何启用“真实”时间戳?

【问题讨论】:

  • 预期/期望的输出是什么?
  • 你能添加一些最小的代码来重现这个吗?我们看不到 START、CALL、START 等记录的位置
  • 感谢您的回答。我在上面添加了示例代码。预期的行为是,时间戳应该不同,还是我错了?我认为日志消息不能同时写在 exakt 中。正如您在最后一行中看到的,呼叫被取消,因为它花费了超过 5 秒的时间。我想调查一下我在哪些职能部门浪费了这么多时间。

标签: c# asynchronous nlog


【解决方案1】:

没有代码不太清楚(你如何在异步/等待之间登录)。

但你可能想要

<time type="AccurateUTC" />

在 nlog.config 中。

https://github.com/NLog/NLog/wiki/Time-Source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-23
    • 2014-06-06
    • 2020-05-03
    • 2014-06-19
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 2014-12-18
    相关资源
    最近更新 更多