私は単純なコンソールアプリケーションを持っています。私は多くの場所でConsole.WriteLine
を使って、実行されているアクティビティをユーザに表示しています。しかし、最後に、すべてのConsole出力をログファイルに保存したいと思っています。C#でコンソールとファイルの両方にコンソールouputを書き込む方法は?
if (!Directory.Exists(LOG_DIRECTORY)) {
Directory.CreateDirectory(LOG_DIRECTORY);
}
long ticks = DateTime.Now.Ticks;
string logFilename = ticks.ToString() + ".txt";
string filePath = Directory.GetCurrentDirectory() + "\\" + LOG_DIRECTORY + "\\" + logFilename;
FileStream ostream = null;
StreamWriter writer = null;
TextWriter oldOut = Console.Out;
try
{
ostream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
writer = new StreamWriter(ostream);
}
catch (Exception ex)
{
Console.WriteLine("Cannot open {0} for writing.", logFilename);
Console.WriteLine(ex.Message);
return;
}
Console.SetOut(writer);
Console.WriteLine("{0}", Directory.GetCurrentDirectory());
Console.SetOut(oldOut);
writer.Close();
ostream.Close();
Console.WriteLine("\n\nDone!");
ポイントは、これはファイルに直接ものを印刷し、何もコンソールに印刷されないことである。現在、私はこのような何かを持っています。これを回避する方法はありますか? Console.WriteLine
出力はコンソールに書き込むためにリアルタイムで直接入力する必要がありますが、ログファイルに書き込むには、プログラムの最後に実行する必要があります。
独自のコンポーネントを作成することも、複数の出力に同時に書き込むことができるNLogなどのログツールを使用することもできます。デバッガ、コンソール、CSV、バッファされた電子メール(自動エラー報告用)に書き込むためにNLogを使用します – DiskJunky