Castle ILogger和延迟加载Func <string> </string>

时间:2014-06-26 14:22:32

标签: c# nlog

所以我使用Castle支持日志记录并选择使用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")
      );
}

所以挖掘我注意到Logger.Info有一个带(Func)的重载 “懒惰装”。伟大的,现在我不需要拥有所有这些如果块到处=]

问题是(我仍然习惯了Func [ing]所以对我很轻松) 这个调用是否被传递给延迟加载Func,还是以字符串形式发送?

 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 个答案:

答案 0 :(得分:4)

您的代码缺少一些括号,使其成为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方法。