java - 调试级别记录语句性能

标签 java spring performance logging log4j

如何调整调试日志记录级别语句以提高性能?我之所以这么问,是因为我的 spring 批处理作业可以在每个作业中调用大约 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)); 

具体问题:

  1. 所以,基本上,我想打印出传递到 JdbcTemplate 的确切查询。有没有比 StringUtils.replace 更好/成本更低的方法?希望也不要那么严厉(为了可维护性)。

  2. 在 updateUserFl 上调用 toString 是复制最终字符串对象以进行字符串操作的正确/有效方法吗?

  3. 是否会将其包装在 if logger.IsDebugEnabled 检查帮助中,或者 slf4j 是否已为我执行此操作?

  4. 我可以使用 logback/{}(以某种我想不到的方式)来提供帮助吗?

  5. log4j2、Java 8 (lambdas) 是我应该考虑的选项吗?请参阅:Avoid Log4j/Slf4j debug enabled checks

最佳答案

这将与 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 语句和绑定(bind)参数,如下所示:

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(即,如果您对绑定(bind)参数值不感兴趣)DEBUG 应该足够了。

关于java - 调试级别记录语句性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39177313/

相关文章:

spring - 通过 spring LDAP 进行身份验证,并在数据库中进行额外的安全检查

java - 如何将j2ee应用程序分布在多台服务器上?

javascript - angular.foreach 和原生 for 循环之间的性能差异

java - Java Swing有没有类似.NET中listview的控件?

java - Android 文件选择器中的 FileNotFoundException

java - 即使输入无效,Ajax 回调 onstart 也能工作

java - jackson 序列化没有正确处理单引号

java - Spring @Transaction

javascript - 性能 API - Safari 浏览器不支持

java - H2O 模型部署到 .Net 中