Преимущество использования «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}
в макете.