NLog在LogManager.GetCurrentClassLogger中未使用派生程度最高的类

问题描述 投票:0回答:2

我具有以下class设置。 Logger应该具有名称*.UsedClass,而不是*.BaseClass。是否有可能使它从BaseClass开始工作,还是必须从最衍生的类实例化Logger

public abstract class BaseClass
{
    public Logger Logger { get; }

    protected BaseClass()
    {
        Logger = LogManager.GetCurrentClassLogger(GetType());
    }
}

public abstract class ExtendedClass : BaseClass
{

}

public class UsedClass : ExtendedClass
{

}
c# .net nlog
2个回答
1
投票

来自the docs

GetCurrentClassLogger(Type)

获取具有当前类名称的自定义记录器。使用loggerType传递所需记录仪的类型。该类必须继承自Logger

因此,它为您提供了具有当前类名称的记录器,并且它正在尝试使用您传入的Type来确定要创建哪种类型的记录器。

如果要使用当前类的名称获取记录器,请遵循the wiki并使用:

LogManager.GetLogger(GetType().ToString())

0
投票

参考此link:最好的方法是在类中使用静态Logger

要解释为什么在记录器中获得基类名称:首先,您需要记住构造函数与任何其他方法都不相同,构造函数不会被多态调用

((有关更多信息,请参考此answer

© www.soinside.com 2019 - 2024. All rights reserved.