Spring Boot结合Log4j2如何按需管控Hibernate SQL日志显示
解决方案:仅本地Debug模式启用Hibernate SQL日志
方法一:通过Spring Profile + 日志级别精准控制
这种方式更灵活,推荐使用,可完全通过日志框架控制输出,而非依赖show-sql原生开关。
1. 拆分环境配置文件
创建对应环境的Spring配置文件:
- application-dev.yaml(本地开发环境):
spring: profiles: development liquibase.enabled: false jpa: properties: hibernate: format_sql: false dialect: org.hibernate.dialect.SQLServer2012Dialect generate_statistics: false search: enabled: true backend: type: elasticsearch dynamic_mapping: true uris: ${ELASTIC_SEARCH_URL} aws: region: us-west-2 signing.enabled: true
- application-prod.yaml(生产环境):
spring: profiles: production jpa: show-sql: false properties: hibernate: format_sql: false dialect: org.hibernate.dialect.SQLServer2012Dialect generate_statistics: false search: enabled: true backend: type: elasticsearch dynamic_mapping: true uris: ${ELASTIC_SEARCH_URL} aws: region: us-west-2 signing.enabled: true
2. 修改Log4j2配置,添加SQL日志控制
在log4j2.xml的<Loggers>节点中,新增针对Hibernate SQL的Logger配置,通过环境变量控制日志级别:
<Logger name="org.hibernate.SQL" level="${env:LOG_LEVEL_HIBERNATE_SQL:-INFO}" additivity="false" > <AppenderRef ref="${env:LOG_CONSOLE:-Console}" /> </Logger> <!-- 可选:如果需要打印SQL绑定的参数,添加下面的Logger --> <Logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="${env:LOG_LEVEL_HIBERNATE_PARAMS:-INFO}" additivity="false" > <AppenderRef ref="${env:LOG_CONSOLE:-Console}" /> </Logger>
3. 本地开发时设置环境变量
启动本地服务时,设置以下环境变量:
LOG_LEVEL_HIBERNATE_SQL=DEBUG:开启SQL语句日志LOG_LEVEL_HIBERNATE_PARAMS=DEBUG(可选):开启SQL参数日志LOG_CONSOLE=ConsoleDev:使用带高亮的开发日志格式
生产环境无需设置这些变量,默认保持INFO级别,不会输出SQL日志。
方法二:基于Spring Profile控制show-sql开关
如果更倾向于使用Hibernate原生的show-sql开关,可通过Profile分别配置:
1. 调整环境配置
- application-dev.yaml:
spring: profiles: development liquibase.enabled: false jpa: show-sql: true properties: hibernate: format_sql: false dialect: org.hibernate.dialect.SQLServer2012Dialect generate_statistics: false search: enabled: true backend: type: elasticsearch dynamic_mapping: true uris: ${ELASTIC_SEARCH_URL} aws: region: us-west-2 signing.enabled: true
- application-prod.yaml:
spring: profiles: production jpa: show-sql: false properties: hibernate: format_sql: false dialect: org.hibernate.dialect.SQLServer2012Dialect generate_statistics: false search: enabled: true backend: type: elasticsearch dynamic_mapping: true uris: ${ELASTIC_SEARCH_URL} aws: region: us-west-2 signing.enabled: true
2. 配合Log4j2控制日志输出
即使开启了show-sql,也可通过Log4j2限制仅Debug级别输出。修改org.hibernate的Logger级别为环境变量控制:
<Logger name="org.hibernate" level="${env:LOG_LEVEL_HIBERNATE:-INFO}" additivity="false" > <AppenderRef ref="${env:LOG_CONSOLE:-Console}" /> </Logger>
本地开发时设置LOG_LEVEL_HIBERNATE=DEBUG,生产保持默认INFO,这样show-sql的输出会被日志框架过滤,仅本地Debug时可见。
内容的提问来源于stack exchange,提问作者shaikh pasha
相关产品推荐
相关产品推荐

