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