2017-06-20 3 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()); 
     } 
    } 
} 

私はOnStart法上の例外をスローするMyServiceクラスを変更したが、私は、ログファイル内のすべてのログを取得しないと私はCurrentDomain_UnhandledExceptionが呼び出されたかどうかを確認するには、Windowsサービスアプリケーションをデバッグすることはできません。

未処理の例外を記録するにはどうすればよいですか?

+0

この[回答](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); 
      } 
     } 
:私は UnhandledExceptionイベントハンドラを使用しますがトライキャッチで私 Main()ロジックを同封されていない別のなかった

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

セカンド事

関連する問題