【问题标题】:Nlog GetCurrentClassLogger for Inheritance and callsiteNlog GetCurrentClassLogger 用于继承和调用站点
【发布时间】:2017-05-18 15:27:35
【问题描述】:

我正在开发控制台 .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

当从父类调用继承的类名时,如何实现写入记录?

【问题讨论】:

    标签: .net inheritance nlog


    【解决方案1】:

    您可以使用${logger} 模板代替${callsite}

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 2021-12-08
      • 2016-03-13
      • 2017-07-30
      • 2013-02-22
      相关资源
      最近更新 更多