2015-02-03 6 views
10

मैं टॉपशेल और सेरिलोग (क्रमशः Serilog.Extras.Topshelf पैकेज) का उपयोग कर अपने विंडोज सेवा के लिए एक सरल लॉगिंग कॉन्फ़िगरेशन सेट अप करने का प्रयास कर रहा हूं।सेरिलोग टॉपशेल्फ़ एकीकरण काम नहीं कर रहा है

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

सेवा ठीक चलाता है, लेकिन कोई उत्पादन किया जाता है, न तो सांत्वना और न ही निर्दिष्ट लॉग फ़ाइल के लिए (मुझे लगता है कि एक बनाया जा रहा है देख सकते हैं, लेकिन यह खाली रहता है)। क्या किसी को ढांचे का उपयोग करने का अनुभव है?

उत्तर

9

दूसरा कॉल "x.UseSerilog()" Serilog के वैश्विक उदाहरण (Log.Logger) का उपयोग करने के लिए TopShelf के HostLogger को रीसेट करता है, जिसे आपने कॉन्फ़िगर नहीं किया है।

दूसरी कॉल हटाएं और लॉगिंग काम करना शुरू कर देना चाहिए।

एक अन्य विकल्प वैश्विक लकड़हारा कॉन्फ़िगर करने के लिए है:

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 मुझे नहीं पता था कि का उपयोग करते हुए '' LoggerConfiguration' या 'ILogger' पैरामीटर के बिना x.UseSerilog' वैश्विक लकड़हारा का प्रयोग करेंगे। – Jeff

संबंधित मुद्दे