12

ELMAH (素晴らしい) を使用すると、例外に追加した追加情報を表示できます。

例えば

Exception ex = new Exception("New exception to use ErrorSignal functionality");
ex.Data.Add("ExtraInfo", "Here is some extra information i would like to be displayed.");
ErrorSignal.FromCurrentContext().Raise(ex);    

elmah.axd から例外を表示すると、「ExtraInfo」キーと値の情報が表示されず、例外文字列だけが表示されるようです。

4

7 に答える 7

20

私の解決策は、そのようにサーバー変数コレクションに情報を追加することでした。

var context = HttpContext.Current;
context.Request.ServerVariables["ERROR_CALLING_WEBSERVICE_URI"] = uri;
Elmah.ErrorLog.GetDefault(context).Log(new Error(e, context))

はい、これはハックだと思います。
少量の追加データについては、@ Romaが提案するようにエラーをカプセル化することを検討してください。
ただし、この方法は、「カプセル化されたエラーメッセージ」に入れるには情報が多すぎる場合に特に役立ちます。

于 2012-02-23T03:56:56.467 に答える
7

回避する簡単な方法は、エラーをカプセル化することです。外側のエラーには、カスタム メッセージが含まれます。

string msg = "my custom error message";

ErrorSignal.FromCurrentContext().Raise(
               new Elmah.ApplicationException(msg,ex));
于 2010-02-25T14:43:13.630 に答える
2

Elmah は ToString() メソッドを使用して例外の詳細を取得します。カスタム例外の ToString() メソッドをオーバーライドするだけで、次のように動作します。

elmah のサンプル例外

私の例外クラス:

public class MyCustomException : Exception
{
    public string CustomProperty { get; set; }

    public MyCustomException(string message, string customProperty): base(message)
    {
        this.CustomProperty = customProperty;
    }

    public override string ToString()
    {
        var result = base.ToString();
        var propertyData = String.Format("CustomProperty: {0}", this.CustomProperty);

        return result.Insert(
            result.IndexOf(Environment.NewLine),
            Environment.NewLine + propertyData
            );
    }
}
于 2014-11-19T08:39:18.293 に答える
2

いいえ、現在の 1.x リリースで追加情報を表示することはできません。

于 2009-08-04T05:35:18.703 に答える
2

わかりましたので、これが含まれるのを長い間待っていたので、独自のフォークを作成して自分で機能を含めることにしました。

ここで見つけることができます: https://github.com/boena/elmah-with-custom-data

于 2012-11-23T14:24:54.893 に答える
1

これに 1 日を費やしたので、解決策を共有したいと思います。上記の Myster のソリューションと非常によく似ていますが、違いは、次のように、リクエスト サーバー変数の代わりに elmah で使用されるエラー オブジェクトを変更することです。

    public static void LogError(Exception e, IDictionary<string, string> customFields = null)
    {
        var logger = ErrorLog.GetDefault(HttpContext.Current);

        customFields = customFields ?? new Dictionary<string, string>();

        // Used to tell elmah not to log this twice (See global.asax)
        e.Data.Add("Logged", true);

        var error = new Error(e, HttpContext.Current);

        customFields.ForEach(pair => error.ServerVariables.Add(pair.Key, pair.Value));

        logger.Log(error);
    }

次に、アプリケーションに応じて logger.LogError を呼び出します。

mvc カスタム エラー フィルターを追加します ( http://maheshde.blogspot.ca/2012/09/error-handing-with-mvc-using-custom.html )

webforms は global.asax の Application_Error を上書きします

次に、global.asax の最後の手順として、既にログに記録されているエラーをすべて破棄します。

public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
    if (e.Exception.Data.Contains("Logged"))
    {
        if (e.Exception.Data["Logged"].Equals(true)) e.Dismiss();
    }
}
于 2014-03-25T21:52:14.307 に答える
-1

Elmah はオープン ソースであるため、プロジェクトを取得して、独自の目的に合わせて Elmah をカスタマイズすることができます。

http://code.google.com/p/elmah/

MSSQL を使用している場合

  • SqlErrorLog.cs を見てください。

  • 独自のデータベースを生成するための SQLServer.sql

私も同じことをしていますが、ランダムに生成された「エラー コード」列を追加する必要があり、例外データを使用して、通常は uber large xml にあるすべてのカスタム、セッション、フォーム、Cookie 情報を追跡します。分野。これを JSON に変更するかもしれませんが、まだわかりません。

于 2012-05-09T17:01:34.563 に答える