É possível interceptar a saída do console?

Eu chamo um método, digamos, FizzBuzz() , sobre o qual não tenho controle. Este método gera um monte de coisas para o console usando Console.WriteLine .

É possível interceptar a saída que está sendo gerada pelo método FizzBuzz ? Observe que meu aplicativo é um aplicativo do console em si.

Sim, muito possível:

 var consoleOut = new StringWriter(); Console.SetOut(consoleOut); Console.WriteLine("This is intercepted."); // This is not written to console File.WriteAllText("ConsoleOutput.txt", consoleOut.ToString()); 

Mais tarde, se você quiser interromper a interceptação da saída do console, use a modificação abaixo:

 var stdOut = Console.Out; // Above interceptor code here.. Console.SetOut(stdOut); // Now all output start going back to console window 

Ou o OpenStandardOutput faz o mesmo sem a necessidade de salvar o stream padrão primeiro:

 // Above interceptor code here.. var standardOutput = new StreamWriter(Console.OpenStandardOutput()); standardOutput.AutoFlush = true; Console.SetOut(standardOutput); // Now all output starts flowing back to console