tags:

views:

776

answers:

2

I am wrapping the patterns & practices Enterprise Library Logging Application Block for an application written in .NET.

I want to be able to subclass a logger (i.e to provide domain specific logging).

What is the best way to do this?

For e.g, I have a static Logger class at the moment, but this does not allow me to specialize it for domain specific logging.

For example,

Log(MyDomainObj obj, string msg)

+1  A: 

Check out NLog. They use this sort of pattern:

private static Logger myDomainLogger = LogManager.GetCurrentClassLogger();

You can then specialize the output based on the class that myDomainLogger belongs to.

More detail:

class MyDomain
{
    private static Logger _logger = LogManager.GetCurrentClassLogger();

    private void SomeFunc()
    {
        _logger.Trace("this is a test");
    }
}

Then in your output you can have it output "MyDomain.SomeFunc" as part of the "this is a test" message.

Gabe
+1  A: 

Also, checkout log4net. I never found the EL's logging to be as flexible as log4net. I chose log4net since I was already familiar with using log4j.

protected readonly log4net.ILog LOG = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

Doing it this way, I can get logs like this:

2009-07-15 09:48:51,674 [4420] DEBUG SampleNamespace.SampleClass [(null)] - Sample message you want to output

thomasnguyencom