2008-11-18 3 views
2

В дополнение к информированию пользователя, мы хотим собирать информацию для наших целей отладки. Наша система является нишевой системой только для примерно 1400 клиентов, поэтому мы не так хорошо финансируемся, как хотелось бы, поэтому ошибки более распространены, чем хотелось бы. В настоящее время у нас есть окно, которое показывает первую строку сообщения об ошибке в более крупной печати с желтым фоном, чтобы нарисовать глаз пользователя, причем страшная часть в текстовом поле под ним с серым фоном. Также есть кнопка, которая поместит все ее в буфер копирования для отправки в службу поддержки. Сообщение, которое мы пытаемся сделать, состоит из исключения. Сообщение, последние пять частей трассировки стека и имя метода, вызвавшего ошибку (Reflection.MethodBase). Мы планируем добавить возможность пользователю сказать, что он делал в то время, и, возможно, переключатель, указывающий, как часто это происходит, и записывать его в файл журнала. Какую еще полезную информацию мы должны включить?Что должно быть в надежном сообщении об ошибке для отладки?

Мы также рассматриваем отправку его по электронной почте в службу поддержки клиентов, но не подчеркиваем, если электронное письмо не удалось. Есть и другие соображения, связанные с электронной почтой: поддержка пользователей может утонуть в нем, пользователи могут возражать, потому что мы также будем отправлять системную информацию и т. Д.

Я нашел два похожих вопроса о SO, но они на самом деле не сосредоточены на то, что меня интересует. Error Message Text - Best Practices имеет дело с тем, как делать полезные сообщения для пользователя, а Best way to handle error messages имеет дело с тем, где сохранить идентификаторы ошибок и текст ошибки. Меня больше интересует отладка (потому что, к сожалению, в нашей системе много ошибок).

ответ

1

Если вы в конечном итоге включите автоматическую отправку сообщений электронной почты, отправьте их в новый почтовый ящик, чтобы вы могли их фильтровать и маршрутизировать, не нарушая существующих пользователей.

Кроме того, это может быть полезно включать:

  • программное обеспечение номер сборки в сообщении об ошибке, если у вас есть несколько версий продукта с плавающей вокруг.
  • дата/время в UTC
  • Операционная система/браузер/окружающая среда/etc. (Независимо от того релевантно)
  • роль безопасности пользователя, Логин и т.д.
  • следить за контактную информацию (телефон, электронная почта и т.д.) для пользователя
  • Контактная информация для ВАС на экране ошибки
+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 approved), которое содержит некоторые корректирующие предложения, контактную информацию и идентификатор ошибки (UUID для подробной записи в журнале).