Мне интересно, как лучше всего инициализировать log4Net в проекте NUnit. Конечно, я хочу вызвать код инициализации (т. Е. XmlConfigurator.Configure()
), как только смогу, чтобы получить как можно больше ранних выходных данных журнала. Но так как мой проект выполняется через NUnit, у меня мало контроля над точкой входа.
Согласно документации NUnit, он должен сначала вызывать некоторые конструкторы, затем метод, отмеченный атрибутом [SetUp]
в классе, отмеченном [TestFixtureSetup]
.
Итак, во-первых, я создал статический вспомогательный класс, который я могу вызывать несколько раз без проблем.
public static class LoggingFacility
{
private static bool _loggerIsUp = false;
public static void InitLogger()
{
if (_loggerIsUp == false)
XmlConfigurator.ConfigureAndWatch(f);
_loggerIsUp = true;
}
}
Затем я заставил все мои [TestFixtureSetup]
наследовать один, который почти ничего не делает, кроме вызова LoggingFacility.initLogger()
. Но это все же оставляет все конструкторы, которые запускаются ранее, в порядке, который я могу принять только случайным. Более того, он, вероятно, выполнит некоторые статические инициализации, прежде чем я смогу выполнить какой-то код.
На самом деле, как я вижу в своем журнале, первые 4 секунды или около того времени выполнения полностью не записываются.
Значит ли это, что мне придется вызывать мой InitLogger()
в каждом конструкторе и запретить использование какого-либо статического инициализатора? Это тяжелая работа!
Кто-нибудь знает магический трюк с этим?