我创建了一个自定义中间件,将关于HttpContext的信息推送到我的Serilog LogContext:中
if (context == null) throw new ArgumentNullException(nameof(context));
string profile = context.Request.Host.Host;
string ipAddress = context.Connection.RemoteIpAddress?.ToString();
string userAgent = context.Request.Headers["User-Agent"].ToString();
using (LogContext.PushProperty("Profile", profile))
using (LogContext.PushProperty("IpAddress", ipAddress))
using (LogContext.PushProperty("UserAgent", userAgent))
{
await _next(context);
}
我想了解LogContext属性在各种查询(Hhtp请求(中的行为。
来自Microsoft文档:
AsyncLocal表示给定异步控制流(如异步方法(的本地环境数据。
Blazor服务器中间件中的异步控制流是什么?
我的异步控制流是什么
AsyncLocal<T>
值在整个await _next(context)
中持续存在;即直到_next
完成。在所有现代中间件系统中,这都是当前中间件之后的所有中间件。