【问题标题】:Serilog LogContext vs Enrich in OwinSerilog LogContext vs Enrich in Owin
【发布时间】:2016-04-07 01:41:09
【问题描述】:

我正在尝试找出最好的方法:

我有一个 Owin 管道,我想根据请求(URL、IP 地址等)使用各种信息来丰富所有日志

在我看来,我在 Owin 管道中使用 Serilog ForContext() 有两种可能性:

public override async Task Invoke(IOwinContext context)
{
    using (LogContext.PushProperties(
        RequestUri(context),
        RemoteIp(context)))
        {
            await Next.Invoke(context);
        }
    }

或者在配置 Serilog 时设置扩充器:

 var configuration = new LoggerConfiguration()
     .Enrich.WithRequestUrl()
     .Enrich.WithRequestClientIp()
     ...

是否有正确或错误的方法来做到这一点?就我个人而言,我喜欢 LogContext,因为我为我提供了一种访问 Owin 上下文的简单方法,但另一方面,我的所有请求都会触发所有要评估的丰富器。但是话又说回来,它只在请求期间执行一次,而不是针对每个日志记录语句?

这仅仅是基于意见,因此应该被关闭,还是一种方法与另一种方法相比有什么优势?

【问题讨论】:

    标签: c# owin serilog


    【解决方案1】:

    我不相信 Owin 提供了您进行充实工作所需的环境 (static) 上下文信息。出于这个原因,我个人首先会选择LogContext 版本。

    【讨论】:

    • 说得好!当您在 IIS 中运行它时,您仍然可以(AFAIK)通过 HttpContext 访问 owin 上下文。但我宁愿不要。我最感兴趣的是使用 LogContext 是否有任何缺点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    • 2019-12-05
    • 2019-08-08
    • 2022-12-27
    相关资源
    最近更新 更多