Добавление имени метода в NLog
Я использую NLog и следую рекомендуемому шаблону объявления журнала для каждого класса, чтобы иметь возможность отслеживать, какой класс/метод записал в журнал. Я считаю, что очень полезно иметь бит "трассировки стека" верхнего уровня с каждой записью журнала.
Мой код выглядел так:
class SomeClass {
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
void DoStuff() {
logger.Debug("stuff"); }
}
Недавно у меня было требование, чтобы мой единственный проект записывал 3 отдельных файла журнала, и для этого я добавил несколько логинов и целей, как указано здесь: qaru.site/info/249963/...
Однако теперь в моих файлах журналов я потерял имя класса. Теперь он просто записывает имя журнала, которое я указал в NLog.config. Я рассмотрел просто добавление имени метода с вызовом
System.Reflection.MethodBase.GetCurrentMethod(); // use Name property
или используя что-то другое в Reflection, как это
Тем не менее, мне интересно, имеет ли NLog что-то встроенное в это, что мне не хватает? Метод Debug() Я вижу только возможность писать строку с параметрами и, возможно, форматированием.
Является ли это встроенным в NLog?
Ответы
Ответ 1
Существует встроенный рендеринг компоновки, называемый ${callsite}
который вы можете использовать для включения информации о сайте звонка (имя класса, имя метода и исходную информацию) в записи журнала:
<targets>
<target
name="task1File"
xsi:type="File"
layout="${callsite} - ${message}"
fileName="${basedir}../Data/debugLog1.txt"
archiveAboveSize ="5000000"
maxArchiveFiles="2"/>
<target
name="task2File"
xsi:type="File"
layout="${callsite} - ${message}"
fileName="${basedir}../Data/debugLog2.txt"
archiveAboveSize ="5000000"
maxArchiveFiles="2"/>
</targets>