Java日志性能



我使用wildfly21设置日志level=INFO. 在部署的代码中有很多logger.debug语句。

private static Logger logger = LogManager.getLogger(getClass.getName());
logger.debug("Some debug message");

由于日志级别设置为INFO,调试语句正确地没有被记录到文件中。

我的问题是关于logger.debug的性能成本.

在代码中保存调试语句是否有任何性能成本?或者是文件I/O中的实际成本,因此,在需要时将调试语句留给故障排除是没有害处的。

当你的日志调用是低成本的,比如使用字符串文字(或@markspace建议的字符串格式变体),你可以使用logger.debug,如你上面所示:

logger.debug("Some debug message");

但是,如果语句有副作用成本,例如:

logger.debug("Value of X="+x+" extra bits "+someSideEffect(y));

…然后在使用前总是以检查日志级别作为前缀。大多数Logger api支持isXYZEnabledlogger.isEnabled(Level.XYZ)来确定是否使用日志消息:

if(logger.isDebugEnabled())
logger.debug("Value of X="+x+" extra bits "+someSideEffect(y));

这避免了不必要的字符串创建和未使用的日志级别执行的其他计算所带来的任何可能的影响,并且当使用info级别日志记录时,不需要注释掉调试语句。

最新更新