3

私はサイト上のすべての例外をトラップして保存する方法を見つけようとしていますが、問題は、すべてをキャッチしようとは思わないことです。

カスタムエラーページの解決策をすでに理解しており、それを実行していますが、管理者として、ユーザーがいつエラーに遭遇し、どのエラーが発生したかを知りたいと思います。そして、すべての例外をグローバルに取得して保存する方法が必要であることを私は知っています。

私は何日もの間、解決策または少なくとも正しい方法を指し示す何かを探していましたが、私が見つけたのはそれを行うための不器用な方法だけです。

だから私の質問はです。このためのワンストップショップのようなものはありますか?ソリューションのすべてのクラスに何かを追加せずに、例外をキャッチして1か所で保存手順を実行できますか?その場合、保存手順はどこで実行しますか?

4

3 に答える 3

2

Global.asaxファイルをasp.netプロジェクトに追加し、アプリケーションエラーを処理します。

    void Application_Error(object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        string errorMessage = "Application Exception: " + ex.Message;
        if (ex.InnerException != null)
        {
            errorMessage += Environment.NewLine + "Inner Exception: " + ex.InnerException.Message;
        }
        if (Context != null && Context.Request != null)
        {
            errorMessage += Environment.NewLine + "Absolute Url: " + Context.Request.Url.AbsolutePath;
        }
        Services.LoggerManager.Log(
           Services.LoggerManager.eLogContext.Application,
           Services.LoggerManager.eLogType.Error,
           Context, errorMessage);
    }

そしてここにLoggerManagerの部分があります:

public static class LoggerManager
{

    public enum eLogType
    {
        Information = 0,
        Warning = 1,
        Error = 2
    }

    public enum eLogContext
    {
        Application = 0,
        Session = 1
    }

    /// <summary>
    ///  Method for logging custom message
    /// </summary>
    /// <param name="logContext"></param>
    /// <param name="logType"></param>
    /// <param name="context"></param>
    /// <param name="message"></param>
    public static void Log(eLogContext logContext, eLogType logType, HttpContext context, string message)
    {
        switch (logContext)
        {
            case eLogContext.Application:
                //TODO: log application type event...
                break;
            case eLogContext.Session:
                //TODO: log session type event...
                break;
            default:
                throw new NotImplementedException("eLogContext '" + logContext.ToString() + "' is not implemented!");
        }
    }

}
于 2012-11-11T13:26:21.770 に答える
1

Global.asaxで、このイベントを使用します

void Application_Error(object sender, EventArgs e)

詳細については、次のリンクを参照してくださいhttp://msdn.microsoft.com/en-us/library/24395wz3(v=vs.100).aspx

于 2012-11-11T12:55:58.460 に答える
1

ELMAHhttp://code.google.com/p/elmah/をご覧になることをお勧めします

非常に人気があり、nugetからも入手できます。すべてのエラーを非常に簡単にキャッチして管理するように設計されています。エラーを自分で管理したくない場合は、これを強くお勧めします。

于 2012-11-11T13:17:17.820 に答える