Serilog LogContext 与 Owin 中的 Enrich
Serilog LogContext vs Enrich in Owin
我正在尝试找出最好的方法:
我有一个 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 时设置 enrichers:
var configuration = new LoggerConfiguration()
.Enrich.WithRequestUrl()
.Enrich.WithRequestClientIp()
...
这样做有正确或错误的方法吗?就我个人而言,我喜欢 LogContext,因为它为我提供了一种访问 Owin 上下文的简单方法,但另一方面,我的所有请求都会触发对所有增强器进行评估。但话又说回来,它只在请求期间完成一次,而不是针对每个日志记录语句?
这是否完全基于意见,因此应该关闭,或者与另一种方法相比,一种方法有什么优势吗?
我认为 Owin 没有提供您进行丰富工作所需的环境 (static
) 上下文信息。出于这个原因,我个人会先选择 LogContext
版本。
我正在尝试找出最好的方法:
我有一个 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 时设置 enrichers:
var configuration = new LoggerConfiguration()
.Enrich.WithRequestUrl()
.Enrich.WithRequestClientIp()
...
这样做有正确或错误的方法吗?就我个人而言,我喜欢 LogContext,因为它为我提供了一种访问 Owin 上下文的简单方法,但另一方面,我的所有请求都会触发对所有增强器进行评估。但话又说回来,它只在请求期间完成一次,而不是针对每个日志记录语句?
这是否完全基于意见,因此应该关闭,或者与另一种方法相比,一种方法有什么优势吗?
我认为 Owin 没有提供您进行丰富工作所需的环境 (static
) 上下文信息。出于这个原因,我个人会先选择 LogContext
版本。