2008-09-21 3 views
6

.NETウィンドウアプリケーション/レポート予期しないエラーを収集するための最良の方法は何ですか?私たちは現在、車輪の再発明せずに、<strong>予期しない製造誤差</strong>に対処するために持っているものよりも、よりよい解決策を探しています

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

現在、処理されていない例外はすべてlog4netを使用してログに記録され、の分析のメールが返されます。しかし、私たちは時々、これらのエラーは、問題を特定するために、あまりにもほとんど情報が含まれている[レポート]ことがわかりました。など、私たちが情報を必要とするこれらの報告で

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

は、私は本当に最初からこれを開発することによって、車輪を再発明する必要はありません。必要とされるコンポーネント:

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

注: 我々は可能な解決策としてSmartAssemblyに見えたが、近いものの、それは非常に我々のニーズを満たしていなかったと私は、いくつかの選択肢が存在する場合、他のどのような開発者が聞くことを期待していました。

編集:これまでに答えを感謝。たぶん私の元の質問ではっきりしていないかもしれませんが、問題は手つかずの例外をすべて捕らえる方法ではなく、それらを扱い、それらの回りにレポートエンジン(分析)を作成する方法です。

+0

Hiに.NET 1.1のコードベースをアップグレードできるようにするためにOmeaオープンソースを作りましたあなたの要望? –

答えて

5

User Friendly Exception Handlingの記事(アプリケーション情報、スクリーンショット、例外の詳細、OS、テキストファイルと電子メールへのロギング)のほとんどを行うJeff Atwoodの記事をお勧めします。あなたが必要とする余分なもの。

+0

これは正しい方向への一歩です。私は記事を読んで、問題の一部を解決する(エラーを収集する)。あなたが言ったように、それは私たちの特定のニーズのために働く必要がありますが、少なくともそれはキックスタートを提供します。 私は、これらのエラーを分析するために他に何かが存在することを期待しています。 –

2

未処理の例外イベントにアタッチしてログオン/ Webサービス/ etcをヒットできます。

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

私はまた、代わりにThreadExceptionのアプリケーションドメインを使用して、このコードスニペットを見つけました:ここ

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

、実際にはありませんこれを行うための一般的な方法は再利用可能ですが、実際にはアプリケーションのインターフェイスに適切に統合する必要がありますが、アプリケーション名、例外、すべての良いものを取り入れ、あなたのアプリ。

0

JetBrainのOmea Readerに組み込まれているエラー報告機能を調べることができます。予期しないエラーが発生したときにダイアログをポップするcatch-allエラー処理コンポーネントがあります。 JetBrainの公開エラーコレクションWebサービスに問題を提出する前に、詳細を入力することができます。

彼らは、私はそれがSmartAssemblyはかなり満たしていなかったことを意味しているだったかに興味がある、コミュニティはv2または3 http://www.jetbrains.net/confluence/display/OMEA/this+link

関連する問題