04 - Spring Boot Logging
03/03/2025 - 4 phút
Trong bài viết này, chúng ta sẽ tìm hiểu về Spring Boot Logging, cách cấu hình log, tùy chỉnh định dạng, và tối ưu hệ thống logging.
1. Giới Thiệu
Logging (ghi log) là một phần quan trọng trong phát triển ứng dụng. Nó giúp bạn chẩn đoán lỗi, theo dõi hoạt động của ứng dụng, và phân tích dữ liệu khi chạy trong môi trường production.
Spring Boot cung cấp hệ thống logging mạnh mẽ, mặc định sử dụng SLF4J kết hợp với Logback để ghi log hiệu quả. Ngoài ra, bạn có thể dễ dàng cấu hình để sử dụng Log4j2 hoặc các framework logging khác.
Trong bài viết này, chúng ta sẽ tìm hiểu về Spring Boot Logging, cách cấu hình log, tùy chỉnh định dạng, và tối ưu hệ thống logging.
2. Logging Trong Spring Boot
2.1. Các Thành Phần Logging Chính
Spring Boot sử dụng SLF4J (Simple Logging Facade for Java) kết hợp với Logback theo mặc định.
- SLF4J: Cung cấp API chung cho các thư viện logging như Logback, Log4j.
- Logback: Hệ thống logging mặc định của Spring Boot, thay thế Log4j 1.x.
- Log4j2: Một lựa chọn khác thay thế Logback, hiệu suất cao hơn.
2.2. Cấu Hình Logging Mặc Định
Spring Boot cung cấp cấu hình logging mặc định, khi bạn khởi động ứng dụng, nó sẽ tự động in log ra console với mức độ INFO. Ví dụ, nếu bạn chạy ứng dụng Spring Boot, bạn sẽ thấy log như sau:
2024-03-05 12:00:00 INFO com.akitect.Application - Starting Application on localhost...
2024-03-05 12:00:01 INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port 8080
3. Cấu Hình Logging Trong Spring Boot
3.1. Cấu Hình Mức Độ Log
Spring Boot hỗ trợ nhiều mức độ log khác nhau:
- TRACE – Ghi chi tiết nhất.
- DEBUG – Thường dùng để debug ứng dụng.
- INFO – Thông tin chung về quá trình hoạt động.
- WARN – Cảnh báo nhưng không ảnh hưởng đến ứng dụng.
- ERROR – Lỗi nghiêm trọng.
- FATAL – Lỗi nghiêm trọng nhất.
Bạn có thể thay đổi mức độ log trong application.properties
:
logging.level.root=INFO
logging.level.org.springframework=DEBUG
logging.level.com.akitect=TRACE
Hoặc trong application.yml
:
logging:
level:
root: INFO
org.springframework: DEBUG
com.akitect: TRACE
3.2. Ghi Log Vào File
Mặc định, Spring Boot chỉ ghi log ra console, nhưng bạn có thể ghi log vào file bằng cách thêm vào application.properties
:
logging.file.name=logs/app.log
logging.file.path=logs
Cách này sẽ tạo file log tại logs/app.log
.
Nếu bạn muốn phân chia log theo ngày:
logging.file.name=logs/application-%d{yyyy-MM-dd}.log
3.3. Định Dạng Log Tuỳ Chỉnh
Spring Boot sử dụng Logback để định dạng log. Bạn có thể tạo file logback-spring.xml
để tùy chỉnh log:
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/application-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
4. Sử Dụng Logging Trong Mã Java
Bạn có thể sử dụng SLF4J hoặc Logger của Spring để ghi log trong mã nguồn:
4.1. Dùng SLF4J
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service
public class LoggingService {
private static final Logger logger = LoggerFactory.getLogger(LoggingService.class);
public void process() {
logger.info("Ứng dụng đang chạy...");
logger.debug("Đây là log DEBUG");
logger.error("Có lỗi xảy ra!");
}
}
4.2. Dùng @Slf4j
của Lombok
Nếu bạn sử dụng Lombok, bạn có thể đơn giản hóa việc ghi log bằng annotation @Slf4j
:
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class LoggingService {
public void process() {
log.info("Ứng dụng đang chạy...");
log.debug("Đây là log DEBUG");
log.error("Có lỗi xảy ra!");
}
}
5. Tích Hợp Logging Với Spring Boot Actuator
Spring Boot Actuator có endpoint /actuator/loggers
giúp quản lý log runtime:
Xem danh sách logger hiện có:
http://localhost:8080/actuator/loggers
Xem mức độ log của một logger cụ thể:
http://localhost:8080/actuator/loggers/com.akitect
Thay đổi mức độ log runtime: Gửi yêu cầu POST:
{
"configuredLevel": "DEBUG"
}
đến:
http://localhost:8080/actuator/loggers/com.akitect
6. Kết Luận
Spring Boot Logging giúp bạn dễ dàng kiểm soát và giám sát hoạt động của ứng dụng. Bạn có thể:
- Cấu hình mức độ log phù hợp.
- Ghi log ra file thay vì chỉ console.
- Tuỳ chỉnh định dạng log để dễ đọc hơn.
- Tích hợp với Actuator để quản lý log runtime.
👉 Trong bài viết tiếp theo, chúng ta sẽ tìm hiểu về Spring Boot Security, cách bảo mật ứng dụng với Spring Security!