I'm trying to figure out what the right patter and usage of log4net is with a dependency injection framework.
Log4Net uses the ILog interface but requires me to call
LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType)
in each class or method where I need to log information. This seems to go against IoC principles and couples me to using Log4Net.
Should I somehow put in another layer of abstraction somewhere?
Also, I need to log custom properties like the current user name like this:
log4net.ThreadContext.Properties["userName"] = ApplicationCache.CurrentUserName;
How can I encapsulate this so that I don't have to remember to do it everytime and still maintain the current method that is logging. should I do something like this or am I totally missing the mark?
public static class Logger
{
public static void LogException(Type declaringType, string message, Exception ex)
{
log4net.ThreadContext.Properties["userName"] = ApplicationCache.CurrentUserName;
ILog log = LogManager.GetLogger(declaringType);
log.Error(message, ex);
}
}