web-dev-qa-db-ja.com

log4netは、未処理のアプリケーションエラーをすべてログに記録します

Log4netを使用してmvcWebアプリで発生しているすべての未処理の例外をログに記録する方法に関するチュートリアルまたはサンプルをいくつか教えてください。ありがとうございました

29
kaivalya

今のところ満足しているように見えるglobal.asaxで使用しているコードの下に貼り付けます。log4netで生成されたログファイルで未処理の例外がすべて発生します。

    public class MvcApplication : System.Web.HttpApplication
    {

        private static readonly ILog log = LogManager.GetLogger(typeof(MvcApplication));

        void Application_Error(Object sender, EventArgs e)
        {
            Exception ex = Server.GetLastError().GetBaseException();

            log.Error("App_Error", ex);
        }


        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = "" }
            );

        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
            log4net.Config.XmlConfigurator.Configure();

        }

    }
52
kaivalya

ASP.NETアプリケーションの場合、System.Web.HttpApplication.Errorファイルに配置されるGlobal.asaxイベントを使用します。

protected void Application_Error(Object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();

    // Stop error from displaying on the client browser
    Context.ClearError();

    logger.Fatal(ex.ToString);

}

監視 未処理の例外の管理

6
eljhonb

アスペクト指向プログラミング (AOP)とは何かを確認することをお勧めします。

これは ポストシャープ (のみ-log4netではなくカスタムトレーサーを使用しました)で実現しました。

Log4netにこの「すぐに使える」ものがない場合は、最初にチェックしてください。それについてはよくわかりません。

2
Arnis Lapsa

Log4netには、これに対する組み込みのサポートはありません。 Global.asaxに Application_Errorイベント を実装し、そこでlog4netロガーを呼び出す必要があります。イベントは、アプリ内の未処理のすべてのイベントに対してトリガーされます。

2
Peter Lillevold

面白くなく ここに行きます

        try
        {
            NotImplementedException nie = new NotImplementedException();
            throw nie;
        }
        catch (Exception e)
        {
            Log.Fatal(e);
        }

.net 3.5を使用していると仮定すると、拡張メソッドを使用し、System.Exceptionを拡張してLog(log4net.ILog log)メソッドを追加し、Logインスタンスを正しく設定していれば、アプリで例外が発生した場合はいつでも追加できます。 、そしてあなたはそれを簡単に行うことができます。拡張クラスはかなり大きくなる可能性があり、Debug、Info、Warn、Error、Fatalなどのさまざまなオーバーロードが発生します。

1
Stuart Grassie