Over Communicate
Since early last year I've been meaning to point people to trace logging in .NET instead of using the logging facility in ILM, which might explain why I jumped at the opportunity to harp about it on the TechNet forum.
Last year I stumbled upon trace logging while doing some work using WCF. The log viewer they had was awesome, and I realized it wasn't tied to WCF in any way so it could be a great tool for logging in the ILM sync engine. For more info on the tool, check out:
Using the Service Trace Viewer Tool
As cool as the log viewer is, it is really just the tip of the logging iceberg. Tracing in .NET has some cool features, including:
- Trace sources spew as much detail as possible in your code
- Trace listeners only collect the detail they're interested in
- Trace levels are configured in app config files
- Trace output can be directed to a number of different formatters
The WCF contents in MSDN have some pretty good examples to start with.
Here is how it applies to ILM:
With your extension code:
- Use a TraceSource in your ILM extension code
- Call the TraceInfo event to output logging details in your code
- Compile the extension with the Trace flag on (it is on by default in Visual Studio)
Now your extension is able to spew log output, but nothing happens until you configure it:
- Add a System.Diagnostics section to the miiserver.exe.config file (assuming your extensions run in-process)
- Cycle the miiserver process (so it can read the config file)
- Check out the fruits of your logging labour
On a regular basis, you may choose to leave logging at a lower level to improve performance. Then during hard times, up the logging to Verbose to figure out what is going on in your extensions.

