【发布时间】:2009-06-02 17:32:48
【问题描述】:
我正在尝试通过依赖注入框架找出 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);
}
}
【问题讨论】:
-
更有趣的问题是您使用的是哪个 DI 容器?
标签: design-patterns dependency-injection log4net