.net Nlog GetCurrentClassLogger用于继承和调用站点

.net Nlog GetCurrentClassLogger用于继承和调用站点,.net,inheritance,nlog,.net,Inheritance,Nlog,我正在开发console.Net应用程序,并使用Nlog进行日志记录。我使用${callsite}布局模板记录类名。我想在日志文件中看到继承类从父类调用时的名称 例如: using NLog; namespace ConsoleApp17 { internal class Program { private static void Main(string[] args) { var a = new MyClass2();

我正在开发console.Net应用程序,并使用Nlog进行日志记录。我使用${callsite}布局模板记录类名。我想在日志文件中看到继承类从父类调用时的名称

例如:

using NLog;

namespace ConsoleApp17
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var a = new MyClass2();
            a.Do1();
            a.Do2();
            a.Do3();
        }

        public class MyClass
        {
            protected virtual Logger Logger { get; } = null;

            public void Do1()
            {
                Logger.Info("Do1");
            }

            public virtual void Do2()
            {
                Logger.Info("Do2");
            }
        }

        public class MyClass2 : MyClass
        {
            protected override Logger Logger { get; } = LogManager.GetCurrentClassLogger();

            public override void Do2()
            {
                Logger.Info("Do22");
            }

            public void Do3()
            {
                Logger.Info("Do3");
            }
        }
    }
}
日志为:

2017-05-18 18:22:02.7761|1|ConsoleApp17.Program+MyClass.Do1|INFO|Do1|

2017-05-18 18:22:02.8611|1|ConsoleApp17.Program+MyClass2.Do2|INFO|Do22|

2017-05-18 18:22:04.2831|1|ConsoleApp17.Program+MyClass2.Do3|INFO|Do3|
你看,在第2行和第3行中有一个继承的类名MyClass2,但在第1行中有一个父类名MyClass


当从父级调用继承的类名时,如何实现写入日志?您可以使用
${logger}
模板而不是
${callsite}


当与
GetCurrentClassLogger()
一起使用时,它将显示创建记录器的对象类型的名称。在您的情况下,它将是
MyClass2

您可以使用
${logger}
模板而不是
${callsite}

当与
GetCurrentClassLogger()
一起使用时,它将显示创建记录器的对象类型的名称。在您的情况下,它将是
MyClass2