2010-04-21 43 views
3

我想將自己的會話變量添加到elmah錯誤日誌表並顯示它。我已經修改了源代碼並將新字段添加到Error.cs和其他字段,但我不知道但是當我將HttpContext.Current.Session [「MyVar」]。tostring()值分配給我的字段構造函數停止記錄異常並且不記錄任何異常。將會話變量或自定義字段添加到Elmah錯誤日誌表

我只需要獲取會話變量的值是否有其他方式呢?我讀了一篇文章,他爲電子郵件添加了字段,但沒有說明我應該在哪裏獲得會話價值。我還讀了會話和Cookie記錄由Elmah默認記錄,但我不知道如何訪問他們..感謝大家的幫助。

回答

2

沒有看到您的源代碼我只能做出假設,但我認爲Elmah會停止日誌記錄,因爲您會收到異常。這可能是因爲Session屬性爲空。該會話僅在PostAcquireRequestState事件後可用,因此您無法指望此屬性始終可用。

我這個嘗試自己寫了這樣的方法:

private static Dictionary<string, object> CopySession(HttpSessionState session) 
{ 
    if (session == null || session.Count == 0) 
     return null; 

    Dictionary<string, object> copy = new Dictionary<string, object>(session.Count); 
    foreach (var key in session.Keys) 
    { 
     string name = key.ToString(); 
     copy.Add(name, session[name]); 
    } 

    return copy; 
} 

我稱之爲Error類的這樣的構造這種方法:

// _session is a new field that I added like this: 
// private Dictionary<string, object> _session; 
_session = CopySession(context.Session); 

(剛過服務器變量和其他上下文的內容被複制,您可能需要更改IClonable實現以複製_session字段。)

In我的測試按預期工作。我只在SqlErrorLog類中檢查過,但是對於所有其他ErrorLog類都是相同的:錯誤對象包含我所有的會話變量,我可以以任何我想要的方式將它們存儲在數據庫中。

相關問題