Spring Boot 如何在log4j2中禁用hibsql日志?

ngynwnxp  于 2022-12-04  发布在  Spring
关注(0)|答案(3)|浏览(208)

我们有一个在Sping Boot 中编写的应用程序。我们使用Hibernate search 6从elasticsearch中获取数据。我们配置了log4j2如下:

日志4j2.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

我们希望仅在调试模式下(在本地环境中)显示hibernetsql查询日志,而不在生产构建环境中显示。
我们尝试在应用程序.yaml文件中设置show_sql= false,但它禁用了本地日志,并导致两个环境。我们希望在本地环境中启用SQL查询日志。

qoefvg9y

qoefvg9y1#

您可以使用来自 Spring Boot spring profilesProfiles。这是获得您所期望的最好方法。

sz81bmfz

sz81bmfz2#

您可以使用Spring Profile在本地和生产环境之间进行隔离。创建两个不同的应用程序.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

ax6ht2ek

ax6ht2ek3#

最简单的方法是使用如下所示的Spring轮廓:
在您的application.yml中,您可以根据您所在的分支配置活动配置文件。如果您在dev中,它将采用application-dev的属性,如果您在application-prod的prod中,它将采用application-dev的属性

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

相关问题