[英]Debug Level Logging Statement Performance
如何调整调试日志记录级别语句的性能? 我之所以这样问,是因为我的春季批处理工作可以为每个工作调用大约50个logger.debug语句(或多或少都这样做)两次。
查询:
private final String updateIsUserFl = "update users "
+ "set flag = 'Y' "
+ "where name = ? and id = ? ";
查询执行:
myJdbcTemplate.update(updateIsUserFl, name, id);
记录语句:
String debugQuery = updateIsUserFl.toString();
logger.debug(replace(debugQuery, "?", name, 1));
logger.debug(replace(debugQuery, "?", Integer.toString(id), 1));
具体问题:
因此,基本上,我想打印出传递给我的JdbcTemplate的确切查询。 有没有比StringUtils.replace更好/更便宜的方法? 希望也减轻一些人的负担(出于可维护性的考虑)。
在updateUserFl上调用toString是复制最终字符串对象以进行字符串操作的正确/有效方法吗?
是否将其包装在if logger.IsDebugEnabled检查帮助中,或者slf4j已经为我这样做了?
我可以使用logback / {}(以某种我无法想到的方式)提供帮助吗?
我应该考虑选择log4j2,Java 8(lambdas)吗? 请参阅: 避免启用Log4j / Slf4j调试
这将与org.springframework.jdbc-3.0.6.RELEASE.jar一起使用。 TRACE级别将执行此操作。
我正在使用log4j-1.2.15以及slf4j(1.6.4)和属性文件来配置log4j:
log4j.logger.org.springframework.jdbc.core = TRACE
这将显示SQL语句和绑定参数,如下所示:
Executing prepared SQL statement [select HEADLINE_TEXT, NEWS_DATE_TIME from MY_TABLE where PRODUCT_KEY = ? and NEWS_DATE_TIME between ? and ? order by NEWS_DATE_TIME]
Setting SQL statement parameter value: column index 1, parameter value [aaa], value class [java.lang.String], SQL type unknown
Setting SQL statement parameter value: column index 2, parameter value [Thu Oct 11 08:00:00 CEST 2012], value class [java.util.Date], SQL type unknown
Setting SQL statement parameter value: column index 3, parameter value [Thu Oct 11 08:00:10 CEST 2012], value class [java.util.Date], SQL type unknown
SQL类型,我们可以在这里忽略它
对于仅一个SQL(即,如果您对绑定参数值不感兴趣), DEBUG
就足够了。
首先,您可以利用现有的Spring日志记录机制将您的查询和参数视为@Mr。 努伯指出。
如果您想优化自己的日志记录,则需要考虑以下几点:
updateIsUserFl.toString()
是多余的。 updateIsUserFl
已经是包含您的查询的String
。 当您在String
上调用replace()
时,它将返回一个新的String
而不是更改现有的String
(Java中String
是不可变的)。 replace()
不是一个好的选择(它使用正则表达式)。 最好将参数值添加到SQL语句的末尾。 分析就足够了。 因此,最后,您可以这样做:
if (logger.isDebugEnabled()) {
logger.debug(String.format("%s; name=%s, id=%d", updateIsUserFl, name, id));
}
是的,Java 8和Log4j2是值得考虑的选项。 它将允许您使用延迟执行的lambda而不是级别检查。 通常,它也更快,内存消耗更少。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.