java - apache.commons.logging.log 性能没有调试日志代码保护
问题描述
apache.coomos.logging.Log.Log2JLogger提供代码保护,例如log.IsDebugEnabled()
. 但是,可以继续调用log.debug(message)
,如果未配置调试级别,我们将看不到这些消息。
从性能的角度来看,特别是考虑到我们希望将这些调试消息留给生产调试,在尝试记录之前调用这些代码保护是否被认为是最佳实践?
例如,这会被认为是最佳实践吗?
if log.isDebugEnabled()
log.debug("trouble brewing...");
或者打电话
log.debug("I'll slow you down...");
已经为我们这样做了吗?
解决方案
如果为 logging 方法创建参数的成本很高,那么你应该首先调用 guard 方法。在您给出的示例中,没有任何意义,因为静态字符串没有性能成本,并且正如您正确推测的那样,日志框架在决定是否记录之前无论如何都会进行检查。
但请考虑以下事项;
logger.debug(myObject.someMethod());
在这种情况下,myObject.someMethod()
将在记录器从它接收返回值之前调用。如果该方法执行冗长的操作,那么无论记录器是否启用调试,您都将遭受性能损失。在这种情况下,您可能希望在isDebugEnabled()
拨打电话之前使用。
推荐阅读
- c# - 为什么使用 HttpWebRequest 从 localhost 下载的图像损坏?
- python - 附加 2 个带有行和列子集的 pandas 数据帧
- javascript - 转发到java中的静态页面时如何添加一些信息?
- java - 如何在一对多关系中向多方添加值弹簧启动
- ajax - 无法显示来自 AJAX 渴望关系 Laravel 的数据
- android - 引起:com.android.builder.internal.aapt.v2.Aapt2Exception:Android资源链接失败
- javascript - 如何输入已验证的全名字段?
- numbers - 如何使用 C# 中的日期时间信息在特定范围内生成唯一的递增和非重复整数
- web - 网站检查工具的最佳可访问性
- karate - jsonpath响应的断言问题