I made a few improvements to the Logging TraceListener:
- Files can now be aged by date as well as size
- Filename is now completely templated using a single FileNameTemplate property, which supports standard
String.Format
codes for file number and date - Added seperate properties to specify units of scale for age and size (kb, month, gb, week)
- Default limit changed to 1mb maximum size, no age limit, no file count limit
Here's how the new options look when set it up via the .config file:
<!-- this enables IIS-style logging of console output --> <system.diagnostics> <trace autoflush="true" indentsize="4"> <listeners> <add name="CyclicLog" type="ConsoleApp.CyclicLogTraceListener,ConsoleApp" initializeData="fileCountThreshold=10, fileSizeThreshold=512, fileSizeUnit=kilobytes, fileAgeThreshold=1, fileAgeUnit=months, fileNameTemplate='console-{1:MMM-yy}-{0:0000}.log'" /> </listeners> </trace> </system.diagnostics>
And here's how it looks when created manually:
_HtmlLogger = New CyclicLogTraceListener With _HtmlLogger .TimeStampFormat = "" .FileNameTemplate = "html-{1:MMM-yy}-{0:0000}.log" .FileAgeThreshold = 1 .FileAgeUnit = CyclicLogTraceListener.AgeUnit.Months .FileCountThreshold = 3 End With
I did this to get a seperate, private log file for the large amounts of HTML I wanted to trace. Including them with the regular console output is way too noisy. I combined age, number, and size limits, so I end up with something like this:
html-Feb-05-0000.log (1mb) html-Feb-05-0001.log (1mb) html-Mar-05-0000.log (1mb) console-Feb-05-0000.log (512kb) console-Mar-05-0000.log (512kb)
With the configuration specified above, no more than 3 logs will ever exist, and no more than 3 per month, and never more than 512kb or 1mb in size.