ユーザーが停止をクリックするまで、さまざまなタスクを何度も実行する、開始ボタンと停止ボタンを備えた自動化プログラムを作成しました。プログラムには、それぞれの小さなサブタスクの結果を示すいくつかの Console.WriteLines があります。これらを .txt ログに変換することにしたので、プログラムをシャットダウンした後、またはクラッシュした場合に確認できます。
次の Logger クラスを作成しました。
class Logger
{
private string _logName;
public Logger(string logName)
{
_logName = logName;
using (StreamWriter w = File.AppendText(_logName + ".txt"))
{
w.WriteLine("-------------------------------");
}
}
public void Log(string logMessage)
{
using (StreamWriter w = File.AppendText(_logName + ".txt"))
{
w.WriteLine(DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString() + " " + logMessage);
}
Console.WriteLine(logMessage);
}
}
質問:別のクラスに、_logger という Logger インスタンスがあります。ログに行を書き込むたびに、_logger.Log を何度も呼び出します。時々、それはお互いに非常に速く進みます。ログに (using ステートメントで) 行を書き込むたびに StreamWriter の新しいインスタンスを作成するのは間違っていると感じます。そこで、StreamWriter のインスタンス化をコンストラクターに入れることを考えましたが、それでは using ステートメントのクリーンアップ機能が壊れてしまいますね。
これを行う最善の方法はありますか?
前もって感謝します。