2015-03-03 13 views
2

При регистрации из производного класса следует ли наследовать экземпляр класса-регистратора из базового класса или создать новый экземпляр?

А именно, что лучше:Должен ли я наследовать регистратор классов при использовании NLog?

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"); 
    } 
} 

ответ

2

Вы должны использовать новый.

LogManager.GetCurrentClassLogger создает регистратор, чье имя является текущим классом. Если вы используете логгер классов родителя, вы теряете информацию о классе, выполняющем ведение журнала, он выглядит так, как если бы ведение журнала выполнялось родительским классом. В большинстве случаев вы хотите как можно точнее получить информацию при регистрации.

+2

Обновление: на самом деле они (NLog) указывают это в своем учебнике. См. Https://github.com/NLog/NLog/wiki/Tutorial#expose-logger-to-sub-classes – Fildor

+0

Спасибо @Fildor за ссылку doc. Это полезно. – Dinch