2017-10-19 132 views
0

我管理一个向我喜爱的用户显示“用户友好”错误的服务。如果他们遇到错误,他们通常会呼叫支持并提及RequestId。我用下面的代码获得这个请求ID:asp.net核心中的日志请求ID

public string RequestId => Activity.Current?.Id ?? HttpContext.TraceIdentifier; 

现在有趣的是......我们显示的ID给用户,但我们不把它放在我们的日志:)。

目前,我们把所有的日志使用此代码

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     (...) 
     loggerFactory.AddAWSProvider(
      Configuration.GetAWSLoggingConfigSection("Cloudwatch"), 
      (l, obj, ex) => 
      { 
       var level = "info"; 
       if (l == LogLevel.Error || l == LogLevel.Critical) level = "error"; 
       else if (l == LogLevel.Warning) level = "warn"; 
       return JsonConvert.SerializeObject(new 
       { 
        level, 
        msg = ex?.Message ?? obj.ToString(), 
        meta = ex?.ToString() 
       }); 
      }); 

     (...) 
    } 

到CloudWatch的我有一些很难找到一个好办法,HttpRequest中一路发下来这个拉姆达这样我就可以不断记录的ID。

你会如何处理?

谢谢 勒布

回答

1

你可以尝试:

public class Startup 
{ 
    ... 
    public void ConfigureServices(IServiceCollection services) 
    { 
     ... 
     services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 
     ... 
    } 

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
     ILoggerFactory loggerFactory, IHttpContextAccessor httpContextAccessor) 
    { 
     ... 

     var httpContext = httpContextAccessor.HttpContext; 
     var user = httpContext.User; 

     ... 
    } 
} 

让我知道这是工作或没有,因为我也没有办法设置你必须让我有相同的环境没有办法在我发布之前测试代码。

+0

Omg!我会在下周一试试! Thx – Seb

+0

它可以正常工作! – Seb