[英]Using parent class logger in child class
我有一個所有控制器的基類,並在那里定義了記錄器:
public abstract class BaseService
{
private static readonly ILogger logger = LogManager.GetCurrentClassLogger();
protected ILogger Logger => logger;
}
public class ChildClass : BaseClass
{
public void DoStuff()
{
Logger.Info("Some info");
}
}
現在,當我從子類使用Logger
時,日志條目將BaseService顯示為logger。 有沒有辦法告訴日志管理器實例化子類的記錄器?
以下是如何做到這一點:
public abstract class BaseService
{
protected ILogger Logger => LogManager.GetLogger(this.GetType().FullName);
}
請注意, GetLogger
在內部緩存記錄器(針對每個不同的名稱),以便每次獲取Logger
屬性時都不會創建新的記錄Logger
。
這里的技巧是this.GetType().FullName
將返回派生類型的名稱,而不是BaseService
。
更高效的實現將是:
public abstract class BaseService
{
protected ILogger Logger { get; private set; }
protected BaseService(Type type)
{
Logger = LogManager.GetLogger(type.FullName);
}
}
public class ChildClass : BaseService
{
public ChildClass()
: base(typeof(ChildClass)) //fast
{
}
public void DoStuff()
{
Logger.Info("Some info");
}
}
因為typeof(ChildClass)
是編譯時已知的而且this.GetType().FullName
不是。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.