在使用NLog时,我应该继承类记录器吗
本文关键字:继承 记录器 我应该 NLog | 更新日期: 2024-09-24 20:29:28
从派生类进行日志记录时,我应该从基类继承类记录器实例,还是实例化一个新实例
也就是说,哪个更好:
public class Base
{
private static Logger _logger = LogManager.GetCurrentClassLogger();
private void Foo()
{
_logger.Info("Hello world");
}
}
public class Derived : Base
{
new private static Logger _logger = LogManager.GetCurrentClassLogger();
private void Fee()
{
_logger.Info("Hello world");
}
}
或:
public class Base
{
protected static Logger _logger = LogManager.GetCurrentClassLogger();
private void Foo()
{
_logger.Info("Hello world");
}
}
public class Derived : Base
{
private void Fee()
{
_logger.Info("Hello world");
}
}
您应该使用一个新的。
LogManager.GetCurrentClassLogger
创建一个记录器,其名称为当前类。如果使用父类的类记录器,则会丢失进行日志记录的类的信息,这将显示为日志记录是由父类完成的。大多数情况下,在日志记录时,您需要尽可能精确的信息。
我认为Falanwe的答案可能是发布时唯一正确的答案。然而,NLogwiki现在也提出了另一种模式:
public class Base
{
protected Base()
{
_logger = LogManager.GetLogger(GetType().ToString());
}
protected Logger _logger { get; private set; }
private void Foo()
{
_logger.Info("Hello world");
}
}
class ExactClass : BaseClass
{
public ExactClass() : base() { }
private void Fee()
{
_logger.Info("Hello world");
}
}
IMHO 有优点也有缺点
- Pro:子类中的代码较少(DRY)
- Con:记录器不是静态的,因此每个实例都创建自己的记录器。NLog最佳实践说";创建一个新的Logger开销很小,因为它必须获取锁和分配对象