9

注: セッションの使用を避けるべきさまざまな理由はわかっていますが、これは私が継承したプロジェクトなので、返信のその部分をスキップしてください :)

これは解決済みの問題なので、車輪の再発明ではなく、セッション データのログ記録を含む ELMAH パッチ/ブランチ/フォークを誰かが指摘してくれることを願っています。

奇妙なことの 1 つは、既にログに記録されているという Atif の古い投稿です。

http://markmail.org/message/ncmdgwm5rmzewbwu

コメンターのヘニングストは、ここにセッション変数を追加することについて言及しました:

http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx

別のアプローチ(私はむしろ避けたい)は、値をCookieにコピーすることです

http://www.sharpdeveloper.net/content/archive/2008/11/10/how-to-get-session-or-other-custom-values-into-elmah.aspx

代替手段の 1 つは、ELMAH 以外のもの (Exceptioneer など - http://exceptioneer.com/Public/ExceptioneerAndELMAH.aspxを参照) に切り替えることですが、これが現時点で ELMAH に関する唯一の問題であるため、他のものに切り替えるよりも、ELMAHにパッチを当てました。

4

3 に答える 3

6

Atifはツイッターで、既知のパッチはないと言って返信しました。

http://twitter.com/raboof/statuses/7229453423

だから私はそうするパッチを作成しました:

http://twitter.com/manningj/statuses/7231616905

http://blog.sublogic.com/2009/12/patch-to-enable-session-variable-logging-with-elmah/

于 2009-12-31T12:58:06.213 に答える
3

Elmahにパッチを適用するのではなく、例外データを使用してこれを実行しました。Global.asaxで、Application_Error()の例外に追加のデータを挿入しました。「HistoryStack」は、ボタンやタブのクリックなど、ユーザー履歴を記録するための私自身のクラスです。

void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError().GetBaseException();
    var stack = HistoryStack.Dump(); // essentially grabs data from the session
    ex.Data.Add("historyStack", stack);
}

次に、ErrorMail_Mailing()でデータを取得し、電子メールに追加しました。

void ErrorMail_Mailing(object sender, Elmah.ErrorMailEventArgs e)
{
    var stack = e.Error.Exception.Data["historyStack"] as Stack<string>;
    if (stack == null && e.Error.Exception.InnerException != null)
    {
        // could probably skip the first try and go straight to this assignment:
        stack = e.Error.Exception.InnerException.Data["historyStack"] as Stack<string>;
    }

    if (stack != null && stack.Count > 0)
    {
        e.Mail.Body = e.Mail.Body + "<h1>Browsing History</h1>" + System.Environment.NewLine;
        while (stack.Count > 0)
        {
            e.Mail.Body = e.Mail.Body + stack.Pop() + "<br />" + System.Environment.NewLine;
        }
    }
}

これで、このデータがメールの下部に追加されます。パッチや拡張機能は必要ありません。

于 2012-03-27T00:25:06.420 に答える