Я предполагаю, что вам нужен поток, который записывает в стандартный формат и в файл. То есть вы хотите, чтобы все отображалось на консоли, но вы также хотите, чтобы оно было записано в файл. (Если вы просто хотите перенаправить вывод в файл, вы можете сделать это из командной строки.)
Вам нужно создать свой собственный класс TextWriter
и получить реальный вывод. Вы звоните Console.SetOut
, чтобы заставить консоль писать на TextWriter
.
class ConsoleLogger: TextWriter
{
private TextWriter ConsoleOutputStream;
private StreamWriter LogOutputStream;
public ConsoleLogger(string logFilename)
{
ConsoleOutputStream = Console.Out;
// Initialize your log file
LogOutputStream = new StreamWriter(logFilename);
}
public void Write(string s)
{
ConsoleOutputStream.Write(s);
LogOutputStream.Write(s);
}
// Other Write functions format their arguments and call Write(string).
}
И в программе, которая использует это:
private ConsoleLogger MyLogger;
const string LogFilename = "ConsoleLog.txt";
void Main()
{
MyLogger = new ConsoleLogger(LogFilename);
Console.SetOut(MyLogger);
}
Вам не нужно переопределять все методы TextWriter
. Как говорится в документации , «производный класс должен минимально реализовывать метод TextWriter.Write(Char)
, чтобы создать полезный экземпляр TextWriter
».
Я сделал что-то похожее на это, и это работает довольно хорошо.