Here is one question from here on SO that is trying to get some logging best practices documented: Logging best practices
Some common themes:
Probably the most common logging practice is to retrieve a logger in each type, based on that type, like this:
class MyClass
{
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
public void DoSomething()
{
logger.Info("Doing something");
}
}
This you allows you a great degree of flexibility in configuring and controlling your logging. If your namespaces are logically laid out, you can easily turn logging on or off or set it to a particular level for a given class, namespace, part of a namespace, etc.
If you wrap the logger, be careful and wrap it correctly. See this post for some (not necessarily definitive) discussion about logging abstractions. Some important issues to consider when wrapping: Do you want to maintain call site info? Think twice about making a single static logger that does not give you the ability to configure logging differently for different areas of your code.
Hope this helps.