Log4net:记录器实例化

Log4net:记录器实例化,log4net,log4net-configuration,Log4net,Log4net Configuration,伙计们。 我有一个关于log4net中记录器使用的问题。在选择每个类的记录器(静态只读字段)和每个实例的记录器(只读字段)时,有什么更好的方法?就个人而言,我看到的每个类使用logger的唯一缺点是它的实例化: log4net.LogManager.GetLogger( System.Reflection.MethodBase.GetCurrentMethod().DeclaringType 因为反射,它看起来不太好看。 如果我以以下方式创建记录器: log4net.LogMa

伙计们。 我有一个关于log4net中记录器使用的问题。在选择每个类的记录器(静态只读字段)和每个实例的记录器(只读字段)时,有什么更好的方法?就个人而言,我看到的每个类使用logger的唯一缺点是它的实例化:

log4net.LogManager.GetLogger(
        System.Reflection.MethodBase.GetCurrentMethod().DeclaringType
因为反射,它看起来不太好看。 如果我以以下方式创建记录器:

log4net.LogManager.GetLogger(typeof(MyClass))
有可能我会意外地产生复制/粘贴错误,而不是typeof(MyClass)我可以提供typeof(SomeOtherClass),这很糟糕

使用每个实例的记录器时,我可以使用:

log4net.LogManager.GetLogger(this.GetType())
这种方法不使用反射,并且没有复制/粘贴错误


关于这一点还有其他想法吗?

除了使用依赖注入更好之外,我认为您的方法是好的。我过去也用过这种方法。

哪一种?每个实例?我还想打电话给LogManager。然而,这意味着LogManager基本上应该传递给每个组件,向这些类型的构造函数添加一个强制参数,这会使类复杂化。当然,我将log4net隐藏在日志抽象背后,但是,我认为在这里应用DI是不值得的,因为这是日志记录。你说它因为反射而看起来不太好是什么意思?