2015-02-03 21 views
10

Tôi đang cố thiết lập cấu hình ghi nhật ký đơn giản cho dịch vụ Windows của mình bằng cách sử dụng Topshelf và Serilog (gói Serilog.Extras.Topshelf tương ứng).Tích hợp topshelf Serilog không hoạt động

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

Dịch vụ chạy tốt, tuy nhiên không có đầu ra nào được tạo ra, không có bảng điều khiển cũng như tệp nhật ký được chỉ định (tôi có thể thấy tệp đó đang được tạo nhưng vẫn trống). Có kinh nghiệm sử dụng cả hai khung công tác không?

Trả lời

9

Cuộc gọi thứ hai "x.UseSerilog()" đặt lại HostLogger của TopShelf để sử dụng cá thể chung của Serilog (Log.Logger), mà bạn chưa cấu hình.

Xóa cuộc gọi thứ hai và quá trình ghi nhật ký sẽ bắt đầu hoạt động.

lựa chọn khác là để cấu hình các logger toàn cầu:

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 Tôi đã không nhận ra rằng sử dụng 'x.UseSerilog' mà không LoggerConfiguration' hoặc' tham số 'ILogger' sẽ sử dụng logger toàn cầu. – Jeff

Các vấn đề liên quan