2016-02-27 23 views
6

Sto integrando Serilog in e esistente multi-classe layer e Multi-Assembly Solution che ho creato. La precedente tecnica di registrazione che usavo era semplicemente passare una stringa sugli strati con gli eventi. Mi piacerebbe andarmene da questo.Un logger per una soluzione multi-progetto

Ho letto che posso usare il file app.config per caricare la configurazione del logger in ogni classe nella mia libreria, ma come posso farlo in un progetto multi-assembly.

Ho un progetto di primo livello/avvio e due progetti di libreria di classi. Vorrei usare lo stesso logger con due lavandini per l'intero programma.

Questi sono gli articoli che ho trovato finora

https://github.com/serilog/serilog/wiki/AppSettings

http://nblumhardt.com/2014/04/xml-configuration-for-serilog/

Qualcuno potrebbe spiegare come eseguire questa operazione?

risposta

5

Serilog consente di utilizzare una configurazione del logger per programma; sebbene sia possibile regolare la registrazione di classe per classe, questo di solito viene fatto dopo il fatto con il filtraggio e così via.

L'approccio consigliato è:

Impostare Serilog come la prima cosa in Program.Main() o dovunque punto di ingresso della tua app è:

Log.Logger = new LoggerConfiguration() 
    .WriteTo.Sink1() 
    .WriteTo.Sink2() 
    .CreateLogger(); 

Avviso Questo imposta il Log classe statica. Altrove nella tua app puoi scrivere:

Log.Information("This is a message"); 

e il messaggio verrà passato a entrambi i lavandini. È possibile evitare lo statico Log e passare invece lo ILogger in giro, ma a meno che non si abbiano preferenze forti qui, l'opzione statica è meno problematica.

XML/appSettings configurazione non cambia nulla. Si muove solo alcuni dettagli per il file di configurazione, in modo da cambiare il primo blocco di codice:

Log.Logger = new LoggerConfiguration() 
    .ReadFrom.AppSettings() 
    .CreateLogger(); 

E aggiunge:

<add key="serilog:write-to:Sink1" /> 
<add key="serilog:write-to:Sink2" /> 

per App.config avrà lo stesso effetto. La configurazione nel codice è spesso meno problematica (un minor numero di parti mobili) se è possibile evitare l'XML.