2

スローされたエラーや例外をキャッチできるように、アプリケーションにロギング メカニズムを追加することにしました。ログへのエントリが作成されてもログに追加されず、ファイル内のすべてが上書きされるように見えるため、エントリが 1 つしかないことに気付きました。

欠けているのは単純なものだと感じていますが、System.IO名前空間はあまり使用していません。

ログファイルの作成/確認:

public static void SetWorkingDirectory(string path)
        {
            _workingDirectory = path + "\\ErrorLog.txt";

            if(!File.Exists(_workingDirectory))
            {
                File.Create(_workingDirectory);
            }
            pathSet = true;
        }

ログへの追加:

public static bool Add(string message)
        {
            StringBuilder str = new StringBuilder();
            str.Append(System.DateTime.Now);
            str.Append(" ");
            str.Append(message);
            str.Append(" \n");

            using (StreamWriter writer = new StreamWriter(_workingDirectory))
            {
                writer.Write(str.ToString());
            }
            return true;
        }

ログ自体:

ログファイル

4

5 に答える 5

4

このコンストラクターを使用して、2 番目の引数に true を渡して、ファイルを追加モードで開くようにしてください。

...
using(writer = new StreamWriter(_workingDirectory, true))
...
于 2011-03-17T21:33:04.430 に答える
3

追加する必要があるかどうかを判断するために bool を取る StreamWriter のオーバーロードを使用するだけです。

using (var writer = new StreamWriter(_workingDirectory, true)
{
    ...
}
于 2011-03-17T21:34:40.227 に答える
2

使用しているそのStreamWriterコンストラクターは、ファイルを上書きします。追加するオーバーロードがあります。

 using (StreamWriter writer = new StreamWriter(_workingDirectory, true))

それはすべてドキュメントにあります。

また、これが学習のためでない限り、代わりに多くの利用可能なロギング フレームワークの 1 つを使用してください。ロギングを正しく行うのは難しい場合があります。

于 2011-03-17T21:34:48.040 に答える
1

これまで、この問題を解決するために多くのプログラミング時間が費やされてきました。代わりに、log4net などのロギング パッケージを使用して、記述中のコードを計測できるようにするためのコードをデバッグする時間を節約することをお勧めします。

于 2011-03-17T21:36:00.363 に答える
1

driis が上で述べたように、ロギングを実行するときは、既製のロギング フレームワークの 1 つを使用するのが最善です。極端な労力をかけなくても、より効率的かつクリーンに行うことができるからです。.NET での私のお気に入りは、事前にパッケージ化されたSystem.Diagnosticsトレース ユーティリティを使用することです。これにより、アプリの構成で tracelistener を宣言し、コードで次のように記述できます。

Trace.Write("Test output ");

または、 log4Netフレームワークを使用することもできます。

于 2011-03-17T21:48:22.100 に答える