2017-06-20 83 views
0

我正在開發Windows服務,C#,4.7 .NET Framework和log4net。使用log4net在Windows服務中記錄未處理的異常

我想記錄未處理的異常,但似乎log4net在Program.cs中不起作用。

using System; 
using System.ServiceProcess; 

namespace MyWindowsService 
{ 
    static class Program 
    { 
     private static readonly log4net.ILog log = 
      log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     static void Main() 
     { 
      AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 

      log4net.Config.XmlConfigurator.Configure(); 

      ServiceBase[] ServicesToRun; 
      ServicesToRun = new ServiceBase[] 
      { 
       new MyService() 
      }; 
      ServiceBase.Run(ServicesToRun); 
     } 

     private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
     { 
      log.ErrorFormat("UnhandledException: {0}", e.ToString()); 
     } 
    } 
} 

我已經修改MyService類扔在OnStart方法例外,但我沒有得到任何日誌中的日誌文件,我不能調試Windows服務的應用程序,以查看是否CurrentDomain_UnhandledException被調用。

你知道我該如何記錄未處理的異常嗎?

+0

這是[answer](https://stackoverflow.com/a/5117790)有幫助嗎? – kennyzx

回答

0

我目前正在研究一個類似的項目。帶有log4net的Windows服務,需要記錄未處理的異常。我首先注意到的是,沒有設置configfile。如果這是不是故意的,你應該添加一行這樣的命名空間上面:

static void Main() 
     { 
      try 
      { 
       log4net.Config.XmlConfigurator.Configure(); 

       ServiceBase[] ServicesToRun; 
       ServicesToRun = new ServiceBase[] 
       { 
        new MyService() 
       }; 
       ServiceBase.Run(ServicesToRun); 
      } 
      catch(Exception ex) 
      { 
       log.Fatal("Unhandled", ex); 
      } 
     } 

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)] 

我做不同的是沒有使用UnhandledException事件處理程序,但圍在嘗試捕捉我Main()邏輯第二件事