如果日志级别低于阈值,则防止昂贵的日志调用

Bas*_*mme 3 c# nlog

如果我做NLog.Trace():

logger.Trace("Json: {0}", Newtonsoft.Json.JsonConvert.DeserializeObject(myObject));
Run Code Online (Sandbox Code Playgroud)

我的高级错误是错误的:

<logger name="*" minlevel="Error" writeTo="mail" enabled="false" />
Run Code Online (Sandbox Code Playgroud)

我的对象会被反序列化吗?是的,当然是的.但是我怎么能避免这个呢?

Igo*_*gor 6

if(logger.IsTraceEnabled)
    logger.Trace("Json: {0}", Newtonsoft.Json.JsonConvert.SerializeObject(myObject));
Run Code Online (Sandbox Code Playgroud)

请参见IsTraceEnabled.

对于记录呼叫本身可能很昂贵的呼叫(如上面的情况)或重复的高呼叫循环,这是一种很好的做法.对于其他所有内容,通常不需要添加检查,因为框架本身在调用内执行相同的检查.