views:

291

answers:

4

I'm using the Console.SetOut method to write all my Console.Out.WriteLines to a file, and this works. The only problem is that it only writes everything to the textfile when I close my application instead of it writing whenever a Console.Out.WriteLine happens. Any ideas on how I can realise this?

How I do it: Before Application.Run();

FileStream writerOutput = new FileStream("Logging_Admin.txt", FileMode.Append, FileAccess.Write);
StreamWriter writer = new StreamWriter(writerOutput);
Console.SetOut(writer);

After Application.Run():

writer.Dispose();

Thanks.

+5  A: 

The StreamWriter will buffer its contents by default. If you want to flush the buffer you must call the Flush method:

Clears all buffers for the current writer and causes any buffered data to be written to the underlying stream.

Andrew Hare
I second this...
Martin Milan
Yep that's the way to go. Thanks a lot!
Fverswijver
+1  A: 

If you don't want to call flush every time manually, you might want to consider implementing your own TextWriter-derived object to do this for you.

David Morton
A: 

What Andrew said, but I would add to this by saying that for a production environment you should use a more robust logging framework than Console.Writeline. The de-facto standard I've found is log4net though I hear that NLog and Microsoft's Application Logging Block are passable.

George Mauer
+2  A: 

StreamWriter has an AutoFlush property. When set to true, you should get the result you need.

Jens