2015-02-03 21 views
10

Próbuję skonfigurować prostą konfigurację rejestrowania dla mojej usługi Windows przy użyciu Topshelf i Serilog (odpowiednio pakietu Serilog.Extras.Topshelf).Integracja półki Serilog nie działa

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

Usługa działa poprawnie, jednak nie ma wyjścia jest wykonany, ani konsoli ani określonego pliku logu (widzę, że jeden jest tworzony, ale pozostaje puste). Czy ktoś ma doświadczenie w korzystaniu z obu frameworków?

Odpowiedz

9

Drugie wywołanie "x.UseSerilog()" resetuje HostLogger TopShelf, aby użyć globalnej instancji Seriloga (Log.Logger), której nie skonfigurowałeś.

Usuń drugie połączenie i rejestracja powinna zacząć działać.

Innym rozwiązaniem jest skonfigurowanie globalnego Rejestrator:

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 Nie zdawałem sobie sprawy, że używanie 'x.UseSerilog' bez' 'LoggerConfiguration' lub parametru ILogger' użyłby globalny rejestrator. – Jeff