Logging TraceListener Improved

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 separate 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 separate, 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.

Jeff Atwood

Written by Jeff Atwood

Indoor enthusiast. Co-founder of Stack Overflow, Discourse, and RGMII. Disclaimer: I have no idea what I'm talking about. Let's be kind to each other. Find me https://infosec.exchange/@codinghorror

⏲️ Busy signing you up.

❗ Something's gone wrong. Please try again.

✅ Success! Check your inbox (and your spam folder, just in case).

Related posts

Monkeypatching For Humans

Monkeypatching For Humans

Although I love strings, sometimes the String class can break your heart. For example, in C#, there is no String.Left() function. Fair enough; we can roll up our sleeves and write our own function lickety-split: public static string Left(string s, int len) { if (len == 0 || s.Length

By Jeff Atwood ·
Comments
Department of Declaration Redundancy Department

Department of Declaration Redundancy Department

I sometimes (often, actually) regress a few years mentally and forget to take advantage of new features afforded by the tools I’m using. In this case, we’re using the latest and greatest version of C#, which offers implicitly typed local variables. While working on Stack Overflow, I was

By Jeff Atwood ·
Comments
Productivity Tip: Upgrade Your Pentium 4

Productivity Tip: Upgrade Your Pentium 4

In C# and the Compilation Tax, several commenters noted that they have “fast dual-core computers,” and yet background compilation performance was unsatisfactory for them on large projects. It’s entirely possible that this is Visual Studio’s fault. However, I’d like to point out that not all dual

By Jeff Atwood ·
Comments

C# and the Compilation Tax

Over the last four years, I’ve basically given up on the idea that .NET is a multiple language runtime. * The so-called choice between the two most popular languages, C# and VB.NET, is no more meaningful than the choice between Coke and Pepsi. Yes, IronPython and IronRuby are

By Jeff Atwood ·
Comments

Recent Posts

An interactive TWiT Series You're the hero of the story! Choose from 1,024 possible endings. OFF by ONE with Jeff Atwood Hosted by Leo Laporte "every choice changes everything!"

Every Choice Changes Everything: The Show

About 3 weeks ago, Leo Laporte and I recorded the first episode of what will be a new monthly show on the TWiT network. Naming things is hard, and we almost voted on the name, like we did for Stack Overflow, but we quickly landed on Off By One with

By Jeff Atwood ·
Comments
Thank You For Being a Friend

Thank You For Being a Friend

It's been one of those months, and by that, I mean one of the 663 months since I was born. This won't be a long post, because I only have two things to say. First, I'm really glad we re-ordered the GMI (Guaranteed

By Jeff Atwood ·
Comments
map of the United States via rgmii.org showing all 3,143 counties by rural (gold) / metro (grey) and population

Launching The Rural Guaranteed Minimum Income Initiative

It's been a year since I invited Americans to join us in a pledge to Share the American Dream: 1. Support organizations you feel are effectively helping those most in need across America right now. 2. Within the next five years, also contribute public dedications of time or

By Jeff Atwood ·
Comments
I’m feeling unlucky... 🎲   See All Posts