6

車輪を再発明することなく、予期しない生産エラーに対処しなければならない現在よりも優れた解決策を探しています。

当社の製品の多くは、リモート サイトにインストールされる WinForm および WPF アプリケーションです。NullReferenceExceptions から「一般的なネットワーク エラー」まで、必然的に予期しないエラーが発生します。したがって、プログラマーのエラーから環境の問題にまで及びます。

現在、これらの未処理の例外はすべて log4net を使用してログに記録され、分析のためにメールで返信されます。ただし、これらのエラー「レポート」に含まれる情報が少なすぎて問題を特定できない場合があることがわかりました。

これらのレポートでは、次のような情報が必要です。

  1. アプリケーション名
  2. アプリケーションのバージョン
  3. ワークステーション
  4. たぶんスクリーンショット
  5. 例外の詳細
  6. オペレーティング·システム
  7. 利用可能なRAM
  8. 実行中のプロセス
  9. 等々...

これをゼロから開発して車輪を再発明したくはありません。必要なコンポーネント:

  1. エラーの収集 (詳細は上記のとおり)
  2. エラー 'sender' (DB またはインターネットが利用できない場合はキューイングが必要です)
  3. エラーデータベース
  4. これらのエラーの分析と報告。たとえば、午後 4:00 から午後 5:00 の間に、最も頻繁に発生する 10 件のエラーまたはタイムアウトが発生します。エラーはバージョン x と y でどのように比較されますか?

注:可能な解決策としてSmartAssemblyを検討しましたが、近いとはいえ、私たちのニーズを完全に満たすものではありませんでした。他の開発者が何をしているか、およびいくつかの代替案が存在するかどうかを知りたいと思っていました。

編集:これまでの回答に感謝します。元の質問では明確ではなかったのかもしれませんが、問題は、未処理の例外をすべてキャッチする方法ではなく、それらを処理し、それらの周りにレポート エンジン (分析) を作成する方法です。

4

3 に答える 3

5

User Friendly Exception Handlingに関する Jeff Atwood の記事をお勧めします。これは、あなたが既に求めていることのほとんど (アプリケーション情報、スクリーンショット、例外の詳細、OS、テキスト ファイルへのログ記録、および電子メール送信) を実行し、ソース コードが含まれているため、余分なものを追加します。必要なもの。

于 2008-09-21T07:50:18.013 に答える
2

未処理の例外イベントにアタッチしてログに記録したり、Web サービスにアクセスしたりできます。

[STAThread]
static void Main() 
{
    Application.ThreadException += new ThreadExceptionEventHandler(OnUnhandledException);
    Application.Run(new FormStartUp());
}
static void OnUnhandledException(object sender, ThreadExceptionEventArgs t) 
{
    // Log
}

ThreadException の代わりに AppDomain を使用している次のコード スニペットも見つけました。

static class EntryPoint {
    [MTAThread]
    static void Main() {
        // Add Global Exception Handler
        AppDomain.CurrentDomain.UnhandledException += 
            new UnhandledExceptionEventHandler(OnUnhandledException);

        Application.Run(new Form1());
    }

    // In CF case only, ALL unhandled exceptions come here
    private static void OnUnhandledException(Object sender, 
        UnhandledExceptionEventArgs e) {
        Exception ex = e.ExceptionObject as Exception;
        if (ex != null) {
            // Can't imagine e.IsTerminating ever being false
            // or e.ExceptionObject not being an Exception
            SomeClass.SomeStaticHandlingMethod(ex, e.IsTerminating);
        }
    }
}

ここにいくつかのドキュメントがあります: AppDomain Unhandled Exception

自分で処理する以外に、これを行うための再利用可能な一般的な方法は実際にはありません。アプリケーションのインターフェースと適切に統合する必要がありますが、アプリケーション名、例外、およびすべての優れた機能と、すべてのアプリの集中ポイントがあります。

于 2008-09-21T07:50:57.140 に答える
0

JetBrainのOmeaReaderに組み込まれているエラー報告機能を調べてみてください。予期しないエラーが発生したときにダイアログをポップするキャッチオールエラー処理コンポーネントがあります。ユーザーは、問題をJetBrainのパブリックエラー収集Webサービスに送信する前に、詳細を入力できます。

彼らはOmeaをオープンソースにして、コミュニティが.NET 1.1コードベースをv2または3にアップグレードできるようにしました。http: //www.jetbrains.net/confluence/display/OMEA/this+link

于 2008-09-21T07:59:50.487 に答える