Преимущество использования «logger per file» в NLog: у вас есть возможность управлять/фильтровать журналы по пространству имен и имени класса. Пример:
<logger name="A.NameSpace.MyClass" minlevel="Debug" writeTo="ImportantLogs" />
<logger name="A.NameSpace.MyOtherClass" minlevel="Trace" writeTo="ImportantLogs" />
<logger name="StupidLibrary.*" minlevel="Error" writeTo="StupidLibraryLogs" />
<!-- Hide other messages from StupidLibrary -->
<logger name="StupidLibrary.*" final="true" />
<!-- Log all but hidden messages -->
<logger name="*" writeTo="AllLogs" />
NLogger имеет очень полезный фрагмент кода для этого. nlogger
фрагмент кода создаст следующий код:
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
Так всего несколько нажатий клавиш, и у вас есть регистратор на класс. Он будет использовать пространство имен и имя класса в качестве имени регистратора. Чтобы задать другое имя вашего класса регистратор, вы можете использовать это:
private static NLog.Logger logger = NLog.LogManager.GetLogger("MyLib.MyName");
И, как сказал @JeremyWiebe, вы не должны использовать уловки, чтобы получить имя класса, который пытается войти сообщение : Имя регистратора (обычно это имя класса) можно легко записать в файл (или другую цель), используя ${logger}
в макете.
hmm. Кажется, здесь есть два вопроса: у одного есть фактический объект журнала для каждого класса, а у одного - имя журнала, то же самое, что и класс. –