如何使用spring-boot禁用log4j2中的hibernate sql日志



我们有一个用spring-boot编写的应用程序。我们使用Hibernate search 6从elasticsearch中获取数据。我们将log4j2配置如下:

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO" packages="net.xxxx.logging">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
</Console>
<Console name="ConsoleDev" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} [%t]
%highlight{%level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=green, DEBUG=blue} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="com.zaxxer.hikari" level="${env:LOG_LEVEL_HIKARI:-INFO}" additivity="false" >
<AppenderRef ref="${env:LOG_CONSOLE:-Console}" />
</Logger>
<Logger name="org.hibernate" level="INFO" additivity="false" >
<AppenderRef ref="${env:LOG_CONSOLE:-Console}" />
</Logger>
<Logger name="org.hibernate.search.fulltext_query" level="INFO" additivity="false" >
<AppenderRef ref="${env:LOG_CONSOLE:-Console}" />
</Logger>
<Logger name="org.springframework" level="${env:LOG_LEVEL_SPRING:-INFO}" additivity="false" >
<AppenderRef ref="${env:LOG_CONSOLE:-Console}" />
</Logger>
<Logger name="org.springframework.ldap" level="${env:LOG_LEVEL_LDAP:-INFO}" additivity="false" >
<AppenderRef ref="${env:LOG_CONSOLE:-Console}" />
</Logger>
<Root level="INFO" includeLocation="false">
<AppenderRef ref="${env:LOG_CONSOLE:-Console}" />
</Root>
</Loggers>
</Configuration>

应用程序。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

我们想显示hibernet sql查询日志只在调试模式下显示(在本地环境中(,而不是在生产构建环境中显示。

我们尝试在application.yaml文件中设置show_sql= false,但它禁用了本地和prod环境中的日志。我们希望能够在本地环境中记录sql查询。

您可以从弹簧引导弹簧配置文件中使用Profiles。得到你所期望的最好的方式。

您可以使用Spring Profile在本地和生产环境之间进行隔离。创建application.yml文件的两个不同副本,如-application-dev.yml和application-prod.yml。在application-dev.yml中,您可以使用show_sql= true启用休眠日志,而在另一个文件application-prod.yml中,可以禁用show_sql= false

您必须创建一个环境变量SPRING_PROFILES_ACTIVE,用于根据您的实例拾取文件。假设您的实例正在开发中,那么您需要将此变量设置为dev,否则它将为prod

要切换配置文件,您可以使用以下选项之一:

JVM属性:-Dspring.profiles.active=dev
命令行开关:--spring.profiles.active=dev
属性文件:spring.profiles.active=dev

最简单的方法是使用这样的弹簧轮廓:

application.yml中,根据您所在的分支配置活动配置文件。如果您在开发中,它将获取应用程序开发的属性,如果您在应用程序产品的产品中

application.yml

spring:
profiles:
active: prod #dev #staging

应用程序开发

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

应用程序产品

liquibase.enabled: false
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

您甚至可以使用属性中的环境变量进行更多优化。

jpa:
show-sql: ${SHOW_SQL}
properties:
hibernate:
format_sql: ${FORMAT_SQL}

最新更新