2015-02-03 13 views
10

Ich versuche, eine einfache Protokollierungskonfiguration für meine Windows-Dienst mit Hilfe von Topshelf und Serilog (das Serilog.Extras.Topshelf-Paket bzw.).Serilog-Topshelf-Integration funktioniert nicht

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

Der Dienst läuft gut, aber keine Ausgabe gemacht wird, weder auf die Konsole noch die angegebenen Protokolldatei (I, dass man sehen kann, wird erstellt, aber es bleibt leer). Hat jemand Erfahrung mit beiden Frameworks?

Antwort

9

Der zweite Aufruf "x.UseSerilog()" setzt HostLogger von TopShelf zurück, um die globale Instanz von Serilog (Log.Logger) zu verwenden, die Sie nicht konfiguriert haben.

Entfernen Sie den zweiten Anruf und die Protokollierung sollte beginnen zu arbeiten.

Eine weitere Option ist der globalen Logger zu konfigurieren:

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 Ich wusste nicht, dass die Verwendung von 'x.UseSerilog' ohne' LoggerConfiguration' oder 'ILogger' Parameter den globalen Logger verwenden würde. – Jeff

Verwandte Themen