So che il logging dovrebbe raccontare una storia di ciò che fanno gli utenti. Ad esempio:
User 1 created a thing
User 2 deleted a thing
User 1 tried to access a thing and encountered an error
Questo è molto utile, ma ciò che è ancora più utile è avere informazioni dettagliate su ogni singola richiesta HTTP:
HTTP GET /Index, UserAgent="...", Username="...", HttpResponseStatus 200
HTTP POST /Index/123, UserAgent="...", Username="...", HttpResponseStatus 201
HTTP DELETE /Index/123, UserAgent="...", Username="...", HttpResponseStatus 200
HTTP GET /Index/123, UserAgent="...", Username="...", HttpResponseStatus 500
Avere informazioni su ogni richiesta che l'utente ha commesso sull'errore è molto utile quando si esegue il debug, sebbene questo tipo di informazioni attraversi un po 'il territorio di analisi e inquini i tuoi registri con molte richieste insulse (HTTP GET / Index x 1000 ).
Molti anni fa mi è stato insegnato che non dovrebbe registrare tutto . I tuoi registri dovrebbero "raccontare una storia" come sopra e niente di più.
Un po 'di recente nel mondo C # / MVC / ASP.NET, questo tipo di registrazione sembra incoraggiato da Serilog che ha incorporato "Enrichers" che registra le proprietà del livello di richiesta per impostazione predefinita:
var logger = new LoggerConfiguration()
.Destructure.UsingAttributes()
.Enrich.With(new HttpRequestIdEnricher())
.Enrich.With(new UserNameEnricher())
.Enrich.With(new HttpRequestRawUrlEnricher())
.Enrich.With(new HttpRequestUserAgentEnricher())
.Enrich.With(new HttpRequestTypeEnricher())
.Enrich.WithProperty("ApplicationRole", "Web")
.Enrich.FromLogContext()
.WriteTo.Seq(ConfigurationManager.AppSettings["SeqServer"])
.CreateLogger();
Insieme a Seq , queste richieste HTTP possono essere interrogate e abbinate alle tue tradizionali dichiarazioni di registro per raccontare una storia più prolissa dell'interazione dell'utente con la tua applicazione web.
Questo tipo di registrazione è considerato una buona pratica ora o esiste un modo migliore per raccogliere i registri di livello HTTP?