【发布时间】:2017-01-03 18:38:24
【问题描述】:
如何调整调试日志记录级别语句的性能?我问是因为我的春季批处理作业可以调用大约 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) 的选项吗?见:Avoid Log4j/Slf4j debug enabled checks
【问题讨论】:
-
只是一个非常通用的提示,因为我对 spring 了解不多:一般来说,JVM 可以很好地与 lambdas 配合使用,所以很可能某些使用 lambdas 的表达式比另一个表达式具有更好的性能,非-lambda 解决方案。所以如果可能的话,你可能想调查一下。
-
使用github.com/arthurblake/log4jdbc 进行sql 日志记录。
标签: java spring performance logging log4j