Почему большинство примеров log4net получают регистратор для класса следующим образом:
private static ILog logger =
LogManager.GetLogger(
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Вместо того, чтобы просто передавать typeof (MyClass):
private static ILog logger = LogManager.GetLogger(typeof(MyClass));
Есть ли какие-либо другие причины для этого, помимо того факта, что первый вариант не требует, чтобы вы вводили конкретное имя класса?
Я пользователь NLog, и обычно это сводится к следующему:
Мне показалось немного странным, что вам нужно пройти рефлексию в Log4Net, поэтому я взглянул на исходный код NLog и, о чудо, вот что они для вас делают:
Думаю, я бы написал что-то подобное для Log4Net как расширение или статический метод вместо того, чтобы вставлять отражение как часть моего кода котла :)
источник
Как вы говорите - это удобно, поскольку вы можете создать регистратор в методе, не зная имени класса (я знаю тривиально), но позволяет вырезать и вставлять методы между классами без необходимости переименовывать вызов.
источник
Я думаю, причина в том, что с помощью
.DeclaringType()
метода вы получаете тип времени выполнения . Вы можете использовать регистратор в базовом классе и по-прежнему видеть фактический тип вашего объекта в выходных данных регистратора. Это делает расследования намного удобнее.источник
Это также упрощает создание шаблонов Codesmith для целей генерации кода.
источник