2

ユーザーへの通知に加えて、デバッグ目的で情報を収集したいと考えています。私たちのシステムは、約 1400 の顧客向けのニッチなシステムであり、そのため、期待したほど資金が不足しているため、バグは私たちが望んでいるよりも一般的です。現在、エラー メッセージの最初の行を大きな文字で表示するウィンドウが用意されています。背景は黄色で、ユーザーの目を引くことができます。その下のテキスト ボックスに怖い部分が灰色の背景で表示されます。カスタマー サポートに送信するためにすべてをコピー バッファに入れるボタンもあります。対象となるメッセージは、exception.Message、スタック トレースの最後の 5 つの部分、およびエラーの原因となったメソッドの名前 (Reflection.MethodBase) で構成されます。ユーザーがその時に何をしていたかを言う機能を追加する予定です。また、これが発生する頻度を示すラジオ ボタンを使用して、ログ ファイルに書き込みます。他にどのような有用な情報を含める必要がありますか?

また、カスタマー サポートにメールで送信することも検討していますが、メールが失敗してもストレスはありません。電子メールには他にも考慮すべき点があります。カスタマー サポートがそれに溺れる可能性がある、システム情報も送信することになるためユーザーが反対する可能性があるなどです。

SO で 2 つの同様の質問を見つけましたが、それらは私が興味を持っていることにあまり焦点を当てていません。エラー メッセージ テキスト - ベスト プラクティスは、ユーザーにとって有用なメッセージを作成する方法を扱い、エラー メッセージを処理する最良の方法は、どこで対処しますエラー ID とエラー テキストを保持します。私はデバッグにもっと興味があります (残念ながら、私たちのシステムには多くのエラーがあるため)。

4

3 に答える 3

1

ユーザーの入力(リクエストごと)、アプリケーションの現在の状態(スローするコードのローカル変数から)、エラーメッセージ、および省略されたスタックトレース(予期しないエラーの場合)をログに記録します。ただし、セキュリティ上の理由から、修正の提案、連絡先情報、エラーID(詳細なログエントリへのUUID)を含む「顧客に優しい」(企業が承認した)エラーメッセージのみを送信します。

于 2008-11-18T22:08:38.297 に答える
1

自動メール送信を含めることになった場合は、それらを新しいメールボックスに送信して、既存のカスタマー サポート担当者を混乱させることなく、それらをフィルタリングしてルーティングできるようにします。

それ以外に、次のものを含めると便利な場合があります。

  • 製品のバージョンが複数ある場合は、エラー メッセージのソフトウェア ビルド番号。
  • UTC の日付/時刻
  • オペレーティング システム/ブラウザ/環境など。(関連するものは何でも)
  • ユーザーのセキュリティ ロール、ログインなど。
  • ユーザーのフォローアップ連絡先情報 (電話、メールなど)
  • エラー画面でのあなたの連絡先情報
于 2008-11-18T18:14:53.403 に答える
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);
}
于 2008-11-18T20:22:17.733 に答える