Согласно документации NLOG:
Большинство приложений будет использовать один регистратор в классе, где название регистратора совпадает с названием класса.
Это - тот же способ, которым работает log4net. Почему это - хорошая практика?
С log4net использование одного логгера на класс позволяет легко определить источник сообщения журнала (т.е. класс, пишущий в журнал). Если у вас нет одного логгера на класс, а вместо этого есть один логгер для всего приложения, вам придется прибегнуть к большим уловкам отражения, чтобы узнать, откуда приходят сообщения журнала.
Сравните следующие варианты:
using System.Reflection;
private static readonly ILog _logger =
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public void SomeMethod()
{
_logger.DebugFormat("File not found: {0}", _filename);
}
Logger.DebugFormat("File not found: {0}", _filename); // Logger determines caller
-- or --
Logger.DebugFormat(this, "File not found: {0}", _filename); // Pass in the caller
Если использовать второй пример, то логгеру придется строить трассировку стека, чтобы узнать, кто его вызывает, или ваш код всегда должен будет передавать вызывающую сторону. Используя стиль logger-per-class, вы все еще делаете это, но можете делать это один раз на класс, а не один раз на вызов и устранить серьезную проблему производительности.
В большинстве случаев имя класса обеспечивает хорошее имя для логгера. При сканировании файлов журнала можно увидеть сообщение журнала и связать его непосредственно со строкой кода.
Хорошим примером, когда такой подход не является лучшим, являются журналы SQL в Hibernate. Существует общий логгер под названием "Hibernate.SQL" или что-то в этом роде, где несколько различных классов записывают необработанный SQL в одну категорию логгеров.
Вероятно, потому что вы хотите иметь возможность регистрировать методы, которые видны только классу, без нарушения инкапсуляции, это также упрощает использование класса в другом приложении без нарушения функциональности ведения журнала.
Упрощает настройку приложений по пространству имен или классу.
Я вижу несколько причин для этого выбора.
Сразу приходят на ум две причины: