Cấu hình Logback trong Spring Boot

Giới thiệu về Logback trong Spring Boot

Spring Boot sử dụng Commons Logging cho tất cả các ghi nhật ký nội bộ, nhưng cung cấp cấu hình mặc định cho các hệ thống ghi nhật ký phổ biến như Java Util Logging, Log4J, Log4J2 và Logback. Trong bài viết này, chúng ta sẽ tìm hiểu cách cấu hình Logback để quản lý nhật ký ứng dụng.

Hệ thống ghi nhật ký SLF4J và Logback

SLF4J là một lớp bọc đơn giản cho nhiều framework ghi log khác nhau trong Java. Logback được phát triển bởi tác giả của log4j, với hiệu suất cao hơn và khả năng thích ứng tốt hơn với nhiều môi trường chạy.

Cài đặt phụ thuộc

Khi bạn thêm spring-boot-starter-logging vào dự án Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

Ứng dụng Spring Boot của bạn sẽ tự động sử dụng Logback làm framework ghi log. Tuy nhiên, nếu bạn sử dụng spring-boot-starter (chẳng hạn starter-web), nó đã bao gồm starter-logging, do đó không cần thêm riêng lẻ.

Các thuộc tính cấu hình mặc định

Spring Boot cung cấp sẵn nhiều tùy chọn cấu hình log mà bạn có thể chỉnh sửa qua application.properties:

  • logging.level.root=INFO: Đặt mức log toàn cục.
  • logging.file.name=myapp.log: Ghi log vào file myapp.log.
  • logging.path=/var/log: Lưu tất cả log vào thư mục /var/log với tên mặc định spring.log.

Ví dụ cấu hình mức log

# Thiết lập mức log cho toàn bộ ứng dụng
logging.level.root=WARN

# Thiết lập mức log chi tiết cho package cụ thể
logging.level.org.springframework.web=DEBUG

Tự định nghĩa cấu hình Logback

Bạn có thể tạo tệp cấu hình logback-spring.xml trong thư mục resources:

<configuration scan="true" scanPeriod="30 seconds">

    <property name="LOG_PATH" value="logs/application.log" />

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/archived/app.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>

</configuration>

Ghi log theo môi trường

Để hỗ trợ nhiều môi trường khác nhau (dev, test, prod), bạn có thể sử dụng thẻ <springProfile>:

<springProfile name="dev">
    <root level="debug">
        <appender-ref ref="CONSOLE" />
    </root>
</springProfile>

<springProfile name="prod">
    <root level="info">
        <appender-ref ref="FILE" />
    </root>
</springProfile>

Khi chạy ứng dụng, chỉ định profile bằng tham số:

java -jar app.jar --spring.profiles.active=prod

Thẻ: SpringBoot Logback logging

Đăng vào ngày 10 tháng 6 lúc 03:32