Мы используем NLog для ведения журнала в веб-приложении C# MVC3. Все наши контроллеры расширяют пользовательскую базу "ApplicationController", которая дает нам доступ к постоянно необходимым методам и членам.
Я бы хотел, чтобы все контроллеры имели доступ к логгеру через этот базовый класс, но при этом мне нужна подробная информация о том, в каком производном классе создаются отчеты лога.
Наш контроллер приложения выглядит следующим образом:
public abstract class ApplicationController : Controller
{
protected Logger _logger;
protected virtual Logger Logger
{
get { return _logger ?? (_logger = LogManager.GetCurrentClassLogger()); }
}
protected ApplicationController()
{
Context = new Entities();
}
Если производный контроллер не переопределит Logger, то все утверждения будут показывать, что они исходят от контроллера Application. В настоящее время у меня по сути один и тот же оператор Logger во всех производных контроллерах. Например:
public class PropertyController : ApplicationController
{
private readonly DatatapeService _datatapeService;
private readonly PropertyService _propertyService;
protected override Logger Logger
{
get { return _logger ?? (_logger = LogManager.GetCurrentClassLogger()); }
}
Очевидно, что это плохая практика реализации.
TIA!
, Как создать Регистратор для sub классов страница , NLog wiki теперь предлагает следующий шаблон:
class BaseClass
{
protected BaseClass()
{
Log = LogManager.GetLogger(GetType().ToString());
}
protected Logger Log { get; private set; }
}
class ExactClass : BaseClass
{
public ExactClass() : base() { }
...
}