Блокировка илоггера и функция отложенной загрузки

#c# #nlog

#c# #nlog

Вопрос:

Итак, я использую замок, встроенный в поддержку ведения журнала и выбранный для использования NLog.

итак, я немного прочитал с NLog, кажется, что ранее вы хотели бы, чтобы любое из ваших сообщений журнала всегда было завернуто в блок if, чтобы повысить производительность, не вычисляя значение для сообщения, если оно действительно не требуется. Я понимаю, уродливо, но имеет смысл.

 if (Logger.IsInfoEnabled)
{
      Logger.InfoFormat
      (
       "some info message with a process running for dates of {0} to {1}",
          fromDate.ToString("MM/dd/yyyy"),
          toDate.ToString("MM/dd/yyyy")
      );
}
  

Итак, копаясь, я замечаю этот регистратор.Информация перегружена (Func)
«Лениво загруженный». ОТЛИЧНО, теперь мне не нужно иметь все эти блоки if повсюду =]

вопрос в том (я все еще привыкаю к Func[ing], так что полегче со мной) передается ли этот вызов функции отложенной загрузки или он отправляется в виде строки?

  Logger.Info
     (string.Format(
        "some info message with a process running for dates of {0} to {1}",
        fromDate.ToString("MM/dd/yyyy"), 
        toDate.ToString("MM/dd/yyyy")
     ));
  

Ответ №1:

В вашем коде отсутствуют некоторые скобки, чтобы сделать его Func

 Logger.Info(() =>
    string.Format(
        "Check Pam Calendar for holidays for date range {0} to {1}", 
        fromDate.ToString("MM/dd/yyyy"), 
        toDate.ToString("MM/dd/yyyy")
     ));
  

И это правильный способ написания кода — string.Format метод будет вызываться только в том случае, если Logger он будет регистрировать строку.