【发布时间】:2019-01-09 23:45:54
【问题描述】:
为了跟踪休眠 SQL 语句的参数值,常见的 log4j 参数化如下所示:
<logger name="org.hibernate.SQL">
<level value="debug" />
</logger>
<logger name="org.hibernate.type.descriptor.sql.BasicBinder">
<level value="trace" />
</logger>
这会产生如下的日志输出:
2019-01-10 00:10:29,349 [main] DEBUG SqlStatementLogger.logStatement(SqlStatementLogger.java:92) - select land0_.fk_land as fk_land1_24_0_ from land land0_ where land0_.fk_land=?
2019-01-10 00:10:29,349 [main] TRACE BasicBinder.bind(BasicBinder.java:65) - binding parameter [1] as [BIGINT] - [27]
这对于分析应用程序路径在运行时是如何执行的非常有用。
问题是,BasicBinder 还记录了 LOB 参数值的整个字符串表示形式(如 byte[]),这是非常无用的:
2019-01-07 13:28:45,466 [wwsservices-catalina-exec-10] TRACE org.hibernate.type.descriptor.sql.BasicBinder: binding parameter [2] as [BLOB] - [[37, 80, 68, 70, 45, 49, 46, 52, ...
整个 blob 的字符串表示会打印到日志文件中,这对我来说很烦人。
有没有办法在 Hibernate 或 log4j 中抑制/缩短 LOB 值的日志输出,同时仍显示其他语句参数的值?
是否可以在 log4j 中设置最大日志语句大小?
【问题讨论】: