我正在尝试弄清楚在依赖注入框架中使用log4net的正确模式和用法。
Log4Net使用ILog接口,但需要我调用
LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType)
在每个需要记录信息的类或方法中,我都需要使用Log4Net进行日志记录。这似乎违反了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);
}
}