加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core-mvc – 如何创建从HttpContext.TraceIdentifier读

发布时间:2020-12-16 06:55:20 所属栏目:asp.Net 来源:网络整理
导读:我最近将Serilog集成到了几个.NET Standard类库中,包括一些MVC 6项目使用的类库.我想做的是使用HttpContext.TraceIdentifier丰富日志条目.我编写了一个动作过滤器,将HttpContext.TraceIdentifier设置为Correlation-ID请求标头值(如果存在): public override
我最近将Serilog集成到了几个.NET Standard类库中,包括一些MVC 6项目使用的类库.我想做的是使用HttpContext.TraceIdentifier丰富日志条目.我编写了一个动作过滤器,将HttpContext.TraceIdentifier设置为Correlation-ID请求标头值(如果存在):

public override void OnActionExecuting(ActionExecutingContext context)
{
    StringValues correlationIds;
    Guid correlationId;

    if (!context.HttpContext.Request.Headers.TryGetValue(Constants.CorrelationIdHeaderName,out correlationIds) || correlationIds.Count != 1 || !Guid.TryParse(correlationIds[0],out correlationId))
    {
        correlationId = _guidFactory.Random();

        context.HttpContext.Response.Headers.Add(Constants.CorrelationIdHeaderName,correlationId.ToString("D"));
    }

    context.HttpContext.TraceIdentifier = correlationId.ToString("D");

    base.OnActionExecuting(context);
}

问题是,在请求的生命周期中,如何让Serilog知道相关ID?因为它看起来好像没有HttpContext.Current属性,所以我不确定如何创建一个可以工作的richver.这甚至可能吗?

解决方法

我不认为你需要更丰富的.

将{RequestId}放入接收器的outputTemplate会给我一个类似“0HL0GJPLR7AOD”的ID.如果我在记录内容之前设置了HttpContext.TraceIdentifier,那么{RequestId}会为我提供该ID,因此自定义ID也适用于{RequestId}.

我认为{RequestId}是一个Microsoft.Extensions.Logging功能,但它与serilog开箱即用(至少在你使用Serilog.Extensions.Logging时).

更新:不要忘记配置Enrich.FromLogContext().

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读