General purpose logging framework for .NET