2008-11-18 54 views
2

除了通知用戶,我們還希望爲調試目的收集信息。我們的系統僅適用於大約1400名客戶,因此我們的融資並不像我們希望的那麼好,所以錯誤比我們想要的更常見。我們現在有一個窗口,顯示錯誤信息的第一行,用黃色背景繪製用戶的眼睛,並在灰色背景下面的文本框中顯示可怕的部分。還有一個按鈕可將所有內容放入複製緩衝區以發送給客戶支持。我們試圖去的消息由exception.Message,堆棧跟蹤的最後五個部分以及導致錯誤的方法的名稱(Reflection.MethodBase)組成。我們計劃增加用戶說出他當時正在做的事情的能力,並且可能會有一個單選按鈕,指出發生這種情況的頻率,並將其寫入日誌文件。我們應該包含哪些其他有用的信息?應該在強大的錯誤消息中進行調試?

我們也在考慮通過電子郵件將其發送給客戶支持,但不會強調電子郵件發送失敗。電子郵件還有其他一些注意事項 - 客戶支持可能會淹沒在其中,用戶可能會反對,因爲我們也會發送系統信息等。

我在SO上發現了兩個類似的問題,但它們並沒有真正聚焦關於我感興趣的內容。Error Message Text - Best Practices涉及如何爲用戶提供有用的消息,Best way to handle error messages涉及在哪裏保存錯誤ID與錯誤文本。我對調試更感興趣(因爲不幸的是我們的系統有很多錯誤)。

回答

1

如果最終包含自動發送的電子郵件,請將它們發送到新郵箱,以便在不中斷現有客戶支持人員的情況下對其進行過濾和發送。

除此之外,它可能是有用的,包括:

  • 如果您有您的產品的多個版本流傳在錯誤信息的軟件版本號。
  • UTC中的日期/時間
  • 操作系統/瀏覽器/環境/等。 (無論是相關的)
  • 用戶的安全角色,登錄等
  • 跟進用戶聯繫信息(電話,電子郵件等)
  • 聯繫人信息,供各位錯誤屏幕上
+0

謝謝 - 這看起來不錯。 – CindyH 2008-11-18 20:39:27

1

我們使用以下方法來獲取系統度量。我們還記錄用戶/機器數據和堆棧。

string _osSql = @"SELECT * FROM Win32_OperatingSystem"; 
string _metric = string.Format("Metric Data:{0}", Environment.NewLine); 

foreach (Screen _screen in Screen.AllScreens) 
{ 
    if (_screen.Primary == true) 
    { 
     _metric += "Primary"; 
    } 

    _metric += string.Format("Screen: Width:={0}, Height:={1}{2}", Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, Environment.NewLine); 
} 

ManagementObjectSearcher _mgmt = new ManagementObjectSearcher(_osSql); 

foreach (ManagementObject _o in _mgmt.Get()) 
{ 
    _metric += string.Format("OS:={0} - {1}{2}", _o.Properties["Caption"].Value.ToString(), _o.Properties["CSDVersion"].Value.ToString(), Environment.NewLine); 
    _metric += string.Format("Memory Total:={0}, Available:={1}{2}", _o.Properties["TotalVisibleMemorySize"].Value.ToString(), _o.Properties["FreePhysicalMemory"].Value.ToString(), Environment.NewLine); 
    _metric += string.Format("Description:={0}{1}", _o.Properties["Description"].Value.ToString(), Environment.NewLine); 
    _metric += string.Format("TotalVisibleMemorySize:={0}{1}", _o.Properties["TotalVisibleMemorySize"].Value.ToString(), Environment.NewLine); 
    _metric += string.Format("FreePhysicalMemory:={0}{1}", _o.Properties["FreePhysicalMemory"].Value.ToString(), Environment.NewLine); 
} 
+0

謝謝 - 這看起來不錯。代碼也很方便! – CindyH 2008-11-18 20:40:55

1

我登錄用戶的輸入(爲每一個請求),應用程序(從局部變量投擲代碼)的當前狀態,錯誤消息和縮寫的堆棧跟蹤(意外錯誤)。但是,出於安全原因,我只發送「客戶友好」(corp批准)錯誤消息,其中包含一些更正建議,聯繫信息和錯誤ID(詳細日誌條目的UUID)。