如标题所说。如果我有一个
LOGGER.debug(model.toString())
Run Code Online (Sandbox Code Playgroud)
并且我将日志记录级别设置为INFO,将始终执行该行,如果是,那么,如果您有很多调试日志记录,会产生很大的影响吗?我已经看到一些应用程序具有名为debug = true的属性,并且在代码中类型为
if(debug) {
LOGGER.debug("log message");
}
Run Code Online (Sandbox Code Playgroud)
这是一个更好的方法,还是我应该继续使用LOGGER.debug()而不进行属性检查?
日志记录类只是普通的Java类。
如果您的代码中有一个方法调用,它将被调用。
但是…如果未启用相关级别,则所有日志记录框架的日志方法均设计为立即返回,这使得整个方法调用的成本非常低,基本上没有任何花费。因此,您几乎永远不应使用if (debug)或if (logger.isDebugEnabled())。他们根本没有节省时间。
但是,普通的Java方法仍然是普通的Java方法。执行此命令时:
LOGGER.debug(model.toString());
Run Code Online (Sandbox Code Playgroud)
Java将首先调用model.toString(),然后将其结果传递给记录器。与logger调用不同,如果toString方法执行大量工作和/或非常频繁地调用,则toString 可能会很昂贵。为了解决此问题,日志记录框架具有参数化的日志方法,仅当启用了相关级别时,该方法才会将参数转换为字符串。
使用java.util.logging.Logger,它看起来像这样:
logger.log(Level.FINE, "Model={0}", model); // no toString() call
Run Code Online (Sandbox Code Playgroud)
使用SLF4J或Log4j:
logger.debug("Model={}", model); // no toString() call
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
935 次 |
| 最近记录: |