1

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

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

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

これが、現時点で例外をログに記録する方法です。

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);                
}

だから私が求めているのはです。文字列「パスが見つかりませんでした:」をtxtファイルに記録するにはどうすればよいですか?

4

5 に答える 5

0

少しやり過ぎに見えますが、Log4Net を使用して、app.config の構成に応じてファイルを書き込んだり、メールを送信したりしてみませんか?

基本的に、箱から出してすぐに必要なものをすべて手に入れることができるので、最も重要なことに集中できます。

現在のロジックを保持することにしたとしても、アプリケーションのすべての catch ブロックで DateTime.Now やその他の魔法を指定する代わりに、すべてを実行する Logger クラスを作成します。

于 2011-02-04T10:49:10.183 に答える
0

車輪を再発明する代わりに、log4net http://logging.apache.org/log4net/または NLog http://nlog-project.org/wiki/Documentationを使用できます。どちらも単純なアプリケーションでも学習して使用する価値があります。 .

于 2011-02-04T10:49:53.453 に答える
0

ファイルが見つからない場合に例外をスローする方法を見つける必要があります。

FileNotFoundExceptionファイルが見つからない場合、.NET は既に をスローしているため、これは良い考えではないと思います。それをキャッチして、そのようにメッセージをログに記録する必要があります。

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);
}

例外の種類が既に存在する場合は、新しい例外の種類を作成しないでください。

(私の書式設定の特異性を許してください)

于 2011-02-04T10:54:22.427 に答える
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(" ");   
}

ユーザー定義の例外を作成しているため、別の方法で処理できます

于 2011-02-04T10:52:40.893 に答える
0

フレームワーク設計ガイドラインから:

例外が追加のプロパティを提供する場合は、ToString をオーバーライドしてください。

次に、呼び出すだけで、追加のアクションなしlog.Error(exception)で、記述したとおりにログに記録されます。ToString()

于 2011-02-04T11:00:37.257 に答える