2

执行以下操作时,我在 serilog 中丢失了上下文

public async Task<byte[]> TestAsync(TestQuery query)
{
    using (LogContext.PushProperty("CorrelationId", query.CorrelationId))
    {
        var builder = new Foo(this.logger);
        return await builder.DoSomething(query);
    }
}

当我说失去上下文时,我的意思是如果 DoSomething 继续记录,那么早期消息具有相关 ID,而后面的消息则没有。

相反,如果我做以下一切都很好 - 即相关 id 出现在所有下游消息上。

public async Task<byte[]> TestAsync(TestQuery query)
{
    var lgr = this.logger.ForContext("CorrelationId", query.CorrelationId);
    var builder = new Foo(lgr);
    return await builder.DoSomething(query);
}

我对后者很满意,但从我看到的一个代码示例中,我希望前者能够工作。

4

0 回答 0