我有一个简单的控制台应用程序,并且我已经在许多地方使用了Console.WriteLine
来向用户显示正在执行的活动。但是,最后我还想将所有控制台输出保存到日志文件中。目前,我的代码类似于:
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
的实时输出直接写入控制台,而对于写入日志文件,则可以在程序结束时完成,此时几乎所有其他操作都已完成。