2017-10-19 149 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