Trong các dự án Spring Boot, hệ thống ghi log hỗ trợ nhiều định dạng cấu hình khác nhau tùy theo thư viện được sử dụng:
- Logback:
logback.xml,logback-spring.xml,logback.groovy,logback-spring.groovy - Log4j:
log4j.properties,log4j.xml,log4j-spring.properties,log4j-spring.xml - Log4j2:
log4j2.xml,log4j2-spring.xml - JDK Logging:
logging.properties
Tất cả các file cấu hình này cần đặt trong classpath của ứng dụng để Spring Boot tự động nhận diện.
Mức độ log
Các mức log được sắp xếp theo thứ tự tăng dần mức độ nghiêm trọng:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
Chỉ những log có mức độ lớn hơn hoặc bằng mức cấu hình mới được ghi ra.
Cấu trúc cơ bản trong file Logback
<logger>
Đại diện cho một đối tượng ghi log, thường gắn với một package cụ thể. Logger con kế thừa cài đặt từ logger cha (thường là root).
Thuộc tính quan trọng:
name: tên package hoặc classlevel: mức độ log áp dụng
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
<logger name="com.apache.ibatis" level="DEBUG"/>
<appender>
Xác định đích ghi log và cách thức ghi. Một số loại phổ biến:
ConsoleAppender: xuất ra consoleFileAppender: ghi vào file đơnRollingFileAppender: tự động chia nhỏ file khi đạt ngưỡngAsyncAppender: ghi log bất đồng bộ để tăng hiệu năng
file, encoder, filter, rollingPolicy.
<filter>
Bộ lọc mức độ log, gồm:
LevelFilter: lọc theo một mức cụ thểThresholdFilter: lọc theo ngưỡng (từ mức X trở lên)
level: mức log cần xétonMatch: hành động khi khớp (ACCEPT/DENY)onMismatch: hành động khi không khớp
RollingPolicy
Chiến lược chia nhỏ file log:
TimeBasedRollingPolicy: chia theo thời gian (ngày, giờ...)SizeAndTimeBasedRollingPolicy: kết hợp kích thước + thời gian
Ghi log câu lệnh SQL của MyBatis
Có thể cấu hình qua file properties:
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
Hoặc qua logger trong logback-spring.xml (chỉ hoạt động nếu dùng Slf4jImpl).
Ghi log câu lệnh SQL của Hibernate
<logger name="org.hibernate.SQL" level="DEBUG"/>
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG"/>
<logger name="org.hibernate.type" level="TRACE"/>
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG"/>
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG"/>
Mẫu định dạng log phổ biến
| Ký hiệu | Mô tả |
|---|---|
| %d{yyyy-MM-dd HH:mm:ss.SSS} | Thời gian ghi log |
| %-5level | Mức độ log, căn trái, độ rộng 5 ký tự |
| %logger{36} | Tên logger (thường là tên class) |
| %thread | Tên luồng thực thi |
| %msg | Nội dung log |
| %class | Tên đầy đủ của class |
| %method | Tên phương thức |
| %line | Số dòng mã nguồn |
| %file | Tên file mã nguồn |