2017-10-19 1 views
0

Ich verwalte einen Dienst, der "benutzerfreundliche" Fehler zu meinen geliebten Benutzern anzeigt. Wenn sie einen Fehler erhalten, rufen sie normalerweise Support an und erwähnen die RequestId. Ich erhalte diese Anfrage-ID mit dem Code unten:Log RequestId in asp.net Kern

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

Nun ist die interessante Sache ist, ... wir zeigen die ID für den Benutzer aber wir halten es nicht in unserem Protokoll :).

Derzeit senden wir alle Protokolle

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() 
       }); 
      }); 

     (...) 
    } 

ich einige Probleme mit diesem Code zu Cloudwatch habe einen guten Weg zu finden, die Httprequest des ganzen Weg hinunter diesem Lambda zu senden, so kann ich konsequent die Id anmelden.

Wie würden Sie damit umgehen?

Danke, Seb

Antwort

1

Können Sie versuchen:

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; 

     ... 
    } 
} 

Lassen Sie mich wissen, ob das funktioniert oder nicht, weil ich keine Möglichkeit haben, die gleiche Umgebung, die Sie so haben einrichten Ich habe Es gibt keine Möglichkeit, den Code vor dem Post zu testen.

+0

Omg! Ich werde das nächsten Montag versuchen! Thx – Seb

+0

Kann es gut funktionieren! – Seb