2016-01-27 19 views
10

Se posso aggiungere servizi di registrazione di container (in ASP.NET 5 RC1):separazione e la registrazione di livello quadro in ASP.NET core

services.AddSingleton<ILoggerFactory>(); 
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); 
//or just services.AddLogging(); 

poi posso usare Logger nel mio strato di app:

class MyAppLogicService 
{ 
    public MyAppLogicService(ILogger<MyAppLogicService> logger) 
    { 
     logger.LogInformation("Hey"); 
    } 
} 

Ma in questo caso i miei logger.LogInformation() eventi si mescoleranno con senza importanza eventi informativi quadro (secondo sviluppatori fino a 10 per ogni richiesta!).

ASP.NET 5 documentation states:

Si consiglia di eseguire la registrazione di applicazione a livello di vostra applicazione e le sue API, non a livello del quadro. Il framework dispone già di una registrazione incorporata che può essere abilitata semplicemente da impostando il livello di dettaglio di registrazione appropriato.

Cosa significa? Significa che usare ILogger/ILoggerFactory nel codice client (logica app) non è raccomandato?

Che cos'è una soluzione elegante per separare la registrazione a livello di app dalla registrazione a livello di struttura? Per ora sto usando Serilog e filtraggio da ContextSource, ma questo è tutt'altro che elegante ...

risposta

2

eseguire la registrazione di applicazione a livello della vostra applicazione e le sue API, non a livello del quadro I Pensate che il messaggio qui è che non dovreste provare a registrare tutti i dettagli della richiesta, perché questo è già stato registrato dal framework.

Come di mescolare eventi del registro quadro e gli eventi di registro di applicazione - la documentazione afferma anche:

Quando viene creato un logger, deve essere fornito un nome di categoria. Il nome della categoria specifica la fonte degli eventi di registrazione. Per convenzione questa stringa è gerarchica, con categorie separate da punti (.) Caratteri. Alcuni provider di logging dispongono di supporto per il filtraggio che sfrutta questa convenzione, semplificando l'individuazione dell'output di registrazione di interesse.

Per impostazione predefinita, quando si utilizza iniettato ILogger<MyAppLogicService>, il nome della categoria se il nome completo della classe (con spazio dei nomi).

Quindi, per evitare di ingombrare il tuo registro con informazioni quadro, puoi filtrare tutto il rumore, includendo solo le categorie che corrispondono al tuo spazio dei nomi. Quando si utilizza ConsoleLogger sarebbe simile a questa:

loggerFactory.AddConsole((cat, level) => cat.StartsWith("mynamespace.")); 

Suppongo che questo è simile a "usando Serilog e filtraggio da ContextSource".

Problemi correlati