我试图找出依赖注入框架对log4net的正确模式和用法。
Log4Net使用ILog界面,但需要我打电话
LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType)
在每个需要记录信息的类或方法中。这似乎违反了IoC原则,使我不得不使用Log4Net。
我应该以某种方式在某处放置另一层抽象吗?
另外,我需要这样记录自定义属性,例如当前用户名:
log4net.ThreadContext.Properties["userName"] = ApplicationCache.CurrentUserName;
我如何封装它,这样我就不必记住每次都要做,而仍然保持当前正在记录的方法。我应该做这样的事情还是我完全错过了分数?
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);
}
}