2015-02-03 23 views
10

Sto provando a configurare una semplice configurazione di registrazione per il mio servizio Windows usando Topshelf e Serilog (rispettivamente il pacchetto Serilog.Extras.Topshelf).Integrazione con topshelf di Serilog non funzionante

HostLogger.UseLogger(new SerilogHostLoggerConfigurator(new LoggerConfiguration() 
       .WriteTo.RollingFile(AppDomain.CurrentDomain.BaseDirectory + "\\logs\\app-{Date}.log") 
       .WriteTo.ColoredConsole() 
       .MinimumLevel.Debug() 
       .CreateLogger())); 
HostFactory.Run(x => { 
      x.UseSerilog(); 
      ... 

Il servizio funziona bene, ma nessuna uscita è fatta, né alla console, né il file di log specificato (che posso vedere che uno è in fase di creazione, ma resta vuoto). Qualcuno ha esperienza nell'uso di entrambi i framework?

risposta

9

La seconda chiamata "x.UseSerilog()" reimposta l'HostLogger di TopShelf per utilizzare l'istanza globale di Serilog (Log.Logger), che non è stata configurata.

Rimuovere la seconda chiamata e la registrazione dovrebbe iniziare a funzionare.

Un'altra opzione è quella di configurare il logger globale:

Log.Logger = new LoggerConfiguration() 
      .WriteTo.RollingFile(AppDomain.CurrentDomain.BaseDirectory + "\\logs\\app-{Date}.log") 
      .WriteTo.ColoredConsole() 
      .MinimumLevel.Debug() 
      .CreateLogger(); 

HostFactory.Run(x => { 
     // configure TopShelf to use Serilog's global instance. 
     x.UseSerilog(); 
} 
+0

+1 Non mi rendevo conto che l'utilizzo di 'x.UseSerilog' senza il parametro' 'ILogger' LoggerConfiguration' o userebbe il logger globale. – Jeff