Как настроить логирование в Hibernate?

Как настроить Hibernate для записи логов в Logback файл в Spring Boot приложении?
  • 18 января 2024 г. 18:48
Ответы на вопрос 2
В Spring Boot логирование обычно управляется через фреймворк логирования Logback, который является реализацией SLF4J. Hibernate использует JBoss logging в качестве своего внутреннего логгера, но он может легко интегрироваться со SLF4J.

Чтобы настроить логирование Hibernate в файл через Logback в Spring Boot, вам потребуется выполнить несколько шагов:

**1. Убедитесь, что у вас есть соответствующие зависимости в вашем `pom.xml` (если вы используете Maven) или `build.gradle` (если вы используете Gradle):**

Для Maven:
```xml
<!-- Логгер SLF4J -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-logging</artifactId>
</dependency>
```

Для Gradle:
```gradle
// Логгер SLF4J
implementation 'org.slf4j:slf4j-api'
implementation 'org.springframework.boot:spring-boot-starter-logging'
```

**2. Создайте или отредактируйте конфигурационный файл Logback `logback-spring.xml` в директории `src/main/resources` вашего приложения.** Если файла нет, создайте его со следующим содержимым:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- Укажите путь к файлу логов -->
    <property name="LOG_FILE" value="logs/myapp.log"/>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        </rollingPolicy>
    </appender>
    
    <!-- Логирование SQL запросов Hibernate -->
    <logger name="org.hibernate.SQL" level="DEBUG">
        <appender-ref ref="FILE"/>
    </logger>
  
    <!-- Логирование значений параметров SQL запросов -->
    <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE">
        <appender-ref ref="FILE"/>
    </logger>

    <!-- Основной логгер Spring Boot -->
    <root level="INFO">
        <appender-ref ref="FILE"/>
    </root>

</configuration>
```

**3. Настройте уровни логирования в файле `application.properties` или `application.yml`.**

Для `application.properties`:
```properties
# Включение показа SQL запросов
spring.jpa.show-sql=true

# Настройка логирования Hibernate
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
```

Для `application.yml`:
```yaml
spring:
  jpa:
    show-sql: true

logging:
  level:
    org:
      hibernate:
        SQL: DEBUG
        type:
          descriptor:
            sql:
              BasicBinder: TRACE
```

Также обратите внимание, что уровень логирования BASICBINDER выставлен как TRACE, это позволит логировать реальные значения параметров SQL запроса, которые могут быть полезны для отладки, но следует быть осторожным с данным уровнем логирования в продакшене по соображениям безопасности.

Теперь Hibernate будет логировать SQL запросы и значения параметров в файл `logs/myapp.log` (или в любой путь, который вы указали) со схемой ротации файлов лога.

Убедитесь, что путь к файлу логов, который вы указали в примере (`logs/myapp.log`), с
включил все логи через root посмотрел имена классов которые пишут нашел их package вставил с INFO остальное c FATAL 

файл logback.xml д б в src/main/resurces
есть способ указать в командной строке где но это отдельная история
Похожие вопросы