Nlog GetCurrentClassLogger 用于继承和调用站点
Nlog GetCurrentClassLogger for Inheritance and callsite
我正在开发控制台 .Net 应用程序并使用 Nlog 进行日志记录。我使用 ${callsite} 布局模板来记录 class 名称。我想在日志文件中看到从父
调用时继承 class 的名称
示例:
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 行中有一个继承的 class 名称 MyClass2,但在第 1 行中有一个父 class 名称我的班级。
当从父级调用继承的 class 名称时,我如何实现写入记录?
您可以使用 ${logger}
模板代替 ${callsite}
。
当与GetCurrentClassLogger()
一起使用时,它将显示创建记录器的对象类型的名称。在你的情况下它将是 MyClass2
.
我正在开发控制台 .Net 应用程序并使用 Nlog 进行日志记录。我使用 ${callsite} 布局模板来记录 class 名称。我想在日志文件中看到从父
调用时继承 class 的名称示例:
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 行中有一个继承的 class 名称 MyClass2,但在第 1 行中有一个父 class 名称我的班级。
当从父级调用继承的 class 名称时,我如何实现写入记录?
您可以使用 ${logger}
模板代替 ${callsite}
。
当与GetCurrentClassLogger()
一起使用时,它将显示创建记录器的对象类型的名称。在你的情况下它将是 MyClass2
.