Подтвердить что ты не робот

Добавление имени метода в 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?

4b9b3361

Ответ 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>