What would be the most efficient way of recording to a log (.txt) from a console program on C# and .NET 2.2? My program loops multiple times always outputting different data based on what the user wants, so I’m searching for the most efficient way to achieve this.
I know I can always reopen a stream and then close it, but everytime I do that it would be writing just one line, then next time around (seconds later) the program reloops and needs tor write again. In my opinion, that doesn’t seem very resourse friendly.
I’m using multiple threads that all have output data that I want to log (opening/closing the same file or accessing the same file on different threads might be bad). The ‘holds a reference to a stream writer that auto-flushes’ sounds like a good idea, however I don’t know how to do that.
You could hook into the tracing framework that forms part of the CLR. Using a simple class like: http://www.chaosink.co.uk/files/tracing.zip you can selectively log diagnostic information. To use it add the class to your application. Create an inistance of the tracer in your class like:
and call it using:
There are 4 levels of information in the inbuilt tracing framework:
Verbose – To log program flow
Information – To log specific information of interest to monitors
Warning – To log an invalid state or recoverable exception
Error – To log an unrecoverable exception or state
To access the information from your application then add into the app.config (or web.config) the following:
You can also attach listeners for publishing to the eventlog or anywhere else that interests you. More information on the tracing framework can be found at:
http://msdn.microsoft.com/en-us/library/ms733025.aspx