2011-02-04 10 views
1

こんにちは私は、ユーザー定義の例外をログファイルに書きたいと思います。 私の例外をスローする代わりに、そのメッセージをtxtファイルに記録したいと思います。ユーザー定義例外のログC#

私の例外のコンストラクタは次のようになります。

try 
{ 
    string data = Read(txtLocation.Text); 
    txtInfo.Text = data; 

} 
catch (Exception ex) 
{ 

    WriteLog("[" + DateTime.Now + "]" + " " + ex.Message); 
    MessageBox.Show(" ");  
    throw new OpenFileException(txtLocation.Text, ex);     
} 

は、だから私は聞いてるのよです:

public OpenFileException(string pathToOpen, Exception innerexception) 
    : base("Couldn't find the path: " + pathToOpen, innerexception) 
{ 
    this.pathToOpen = pathToOpen; 
} 

これは私が、現時点では私の例外をログに記録しています方法です。文字列「txtファイルにパスを見つけることができませんでした:」を記録するにはどうすればよいですか?

答えて

0

私は通常、あなたが方法を見つける必要があるあなたが異なっ

+0

Thx djeeg、私がしたかったthats :) –

0

Log4Netを使用してapp.configの設定に応じてファイルを書き込んだり電子メールを送信したりするのはどうしてですか?

基本的には、何も努力することなく箱から取り出しておきたいことがあれば、最も重要なことに集中することができます。

あなたの現在のロジックを維持することを決めたとしても、アプリケーションのすべてのcatchブロックにDateTime.Nowと他の魔法を指定する必要はなく、すべてを行うLoggerクラスを作成します。

+0

私はそれを行う方法を学びたいので、私はlog4netを使用していません。 :)これが私がこれを書こうとしている理由です。ロガークラスを作成しようとしますが、ユーザー定義の例外から文字列をログに記録するにはどうすればよいですか? –

0

それを扱うことができるようにするには、ユーザー定義の例外を作成している通常のtry/catch外

try { 
    try { 
     string data = Read(txtLocation.Text); 
     txtInfo.Text = data; 
    } catch (Exception ex) { 
     throw new OpenFileException(txtLocation.Text, ex); 
    } 

     .... 

} catch(OpenFileException ex) { 
    WriteLog("[" + DateTime.Now + "]" + " " + ex.Message); 
    MessageBox.Show(" "); 
} catch(Exception ex) { 
    WriteLog("[" + DateTime.Now + "]" + " " + ex.Message); 
    MessageBox.Show(" "); 
} 

をユーザー定義の例外をキャッチし、ログうファイルが見つからなかった場合にスローされる例外を取得します。

ファイルが見つからないときに.NETで既にFileNotFoundExceptionがスローされているので、これは良い考えではないと思います。あなたはそれを捕らえて、そのようにメッセージを記録するべきです。

try 
{ 
    string data = Read(txtLocation.Text); 
    txtInfo.Text = data; 

} 
catch (FileNotFoundException ex) 
{ 
    string log = String.Format("[{0}] Couldn't find the path: {1}" 
           , DateTime.Now 
           , ex.FileName); 
    WriteLog(log); 
} 

新しい例外タイプは、すでに存在する場合は作成しないでください。

(私のフォーマットでの特異性を許し)

+0

はい、あなたは正しい、それはそうです.NETにある例外を作成する時間の無駄。ちょうど私の自己によって例外を作ることを試してみたかった、それは何だったのだろうか? –

+0

@Kenneth Andersen:十分に公正。私はこれが実験であることを認識しませんでした:) –

+0

ファイルが開かれていないかどうかによって目的の動作が異なる場合は、さまざまなファイルを開くことができないというカスタム例外があることをお勧めします。例えば、メディアファイルを開くにはCODECもロードする必要があるとします。両方のファイルオープン試行が失敗した場合、FileNotFoundExceptionをスローするのは役に立ちますか、役に立たないでしょうか? 1つのレポートMediaFileOpeningExceptionと他のCodecLoadingExceptionを持つことは、多かれ少なかれ役に立ちますか? – supercat

0

Frameworkの最新デザインガイドラインから:

あなたの例外は、余分な性質を提供する場合、オーバーライドToStringメソッドを実行してください。

log.Error(exception)を呼び出すだけで、余分な操作を行わずにToString()のように記録されます。

関連する問題