使用 log4j2 格式的 Hibernate show-sql 日志

问题描述 投票:0回答:1

我已配置

spring.jpa.show-sql: true

所以控制台日志看起来像这样:

2024-04-20 16:02:01.031 | http-nio-9001-exec-1 | INFO | org.springframework.web.servlet.DispatcherServlet |  | Initializing Servlet 'dispatcherServlet'
2024-04-20 16:02:01.032 | http-nio-9001-exec-1 | INFO | org.springframework.web.servlet.DispatcherServlet |  | Completed initialization in 1 ms
Hibernate: 
    select
        nextval('id_account_seq')
Hibernate: 
    select
        nextval('id_passenger_seq')
Hibernate: 
    insert 
    into
        account
        (creation_date, date_of_birth, email, first_name, last_name, fk_nationality, phone_number, id_account) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    insert 
    into
        passenger
        (fk_account, date_of_birth, email, first_name, is_primary, last_name, fk_nationality, phone_number, id_passenger) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?)

如何配置由

spring.jpa.show-sql: true
生成的日志(以
Hibernate:
开头的日志)以使用与前 2 个日志相同的模式,这两个日志对 log4j2 使用以下 yaml 配置:

Configuration:

  status: warn
    
  Appenders:
    Console:
      name: CONSOLE
      target: SYSTEM_OUT
      PatternLayout:
        Pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} | %t | %-5level| %logger{25} | %mdc{id}{12} | %msg%n"
  
  Loggers:
    Root:
      level: INFO
      AppenderRef:
        - ref: CONSOLE
java hibernate logging log4j2
1个回答
0
投票

虽然这非常简单,但不建议在测试场景之外使用

spring.jpa.show-sql: true
,因为它直接将所有内容卸载到标准输出,而不对日志框架进行任何优化。

此外,它不记录准备好的语句的参数。

您应该在属性文件中配置记录器:

logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

第一行记录 SQL 查询,第二条语句记录准备好的语句参数。

通过设置这些属性,日志将被发送到配置的appender。

来源:https://www.baeldung.com/sql-logging-spring-boot

© www.soinside.com 2019 - 2024. All rights reserved.