记录抢占

Ble*_*eek 2 c# java logging

无关的日志记录可能很昂贵.因此,我可以关闭日志记录或提高日志记录阈值级别以减少生产模式期间的日志记录(每个人都知道!)

但是,调用为logger语句提供参数的例程呢?

考虑记录器语句.

logger.info("number of windows ="+ wins.size());

wins.size()是一个非常昂贵的操作 - 比如说,只是为了说明我(错误)理解问题.

如果关闭信息日志记录,wins.size()仍然会运行.

因为当我进行调试时,似乎wins.size()在log.info()之前首先进行了调整.如果是这样,如果关闭记录器,您有什么策略可以防止记录器语句中的昂贵功能被执行?

Igo*_*aka 5

在C#3.0中,您可以使用lambdas仅在打开日志记录时执行对日志记录功能的调用.这是使用C#Common.Logging的示例:

Logger.Trace(m=>m("number of windows="+wins.size()));
Run Code Online (Sandbox Code Playgroud)

Trace的定义如下:

void Trace(Action<FormatMessageHandler> formatMessageCallback);
Run Code Online (Sandbox Code Playgroud)

和FormatMessageHandler是

public delegate string FormatMessageHandler(string format, params object[] args);
Run Code Online (Sandbox Code Playgroud)

那么,如果启用了跟踪,则会m=>m("number of windows="+wins.size())调用lambda.如果它关闭,从来没有进行昂贵的调用以获得窗口大小.