IsDebugEnabled与Debug(Action <FormatMessageHandler>)

HuB*_*eZa 3 .net lambda logging

在常见的日志记录V2.0中,当LogLevel高于日志条目时,有两种方法可以避免消息评估的成本:

if (Log.IsDebugEnabled)
    Log.Debug("Debug message");
Run Code Online (Sandbox Code Playgroud)

要么

Log.Debug(a => a("Debug message"));
Run Code Online (Sandbox Code Playgroud)

哪种做法更好?有什么优点和缺点?

Res*_*uta 6

根据文件:

利用lambda,ILog接口提供了一种新的安全的方式来编写日志语句

log.Debug( m=>m("value= {0}", obj.Value) );
Run Code Online (Sandbox Code Playgroud)

这样可以确保仅在启用LogLevel.Debug时评估整个表达式,从而使您不必编写

if (log.IsDebugEnabled)
{
    log.Debug("value={0}", obj.Value);
}
Run Code Online (Sandbox Code Playgroud)

避免这种开销.

因此,您的选择中的第二个选项被认为是最佳实践.