Biên Soạn : Nguyễn Hoàng Đạt - Lớp Java07
Email : hoangdat3179@gmail.com
Bài viết tham khảo : https://docs.spring.io/spring-boot/docs/2.1.18.RELEASE/reference/html/boot-features-logging.html
1.Logging
Spring boot sử dụng Commons Loggin cho tất cả ghi log nội bộ. Các cấu hình mặc định được cung cấp để hỗ trợ cho Java Util Logging, Log4J2, SLF4J và Logback. Trong mỗi trường hợp các logger được định nghĩa sẵn để sử dụng console output cũng như ghi vào file.
Có rất nhiều framework ghi nhật ký có sẵn cho Java. Đừng lo lắng nếu danh sách trên có vẻ khó hiểu. Nói chung, bạn không cần phải thay đổi logging dependency và spring boot defaults hoạt động tốt. Khi bạn triển khai ứng dụng của mình cho một servlet container hoặc máy chủ ứng dụng, việc ghi nhật ký được thực hiện thông qua Java Util Logging API sẽ không được định tuyến vào nhật ký của ứng dụng. Điều này ngăn việc ghi nhật ký được thực hiện bởi bộ chứa hoặc các ứng dụng khác đã được triển khai cho nó xuất hiện trong nhật ký ứng dụng của bạn.
2. Định dạng log
Log đầu ra mặc định của Spring boot có dạng như sau:
2019-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52
2019-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms
2019-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2019-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
Các thông tin đầu ra gồm có:
Ngày và thời gian: độ chính xác mili giây và có sắp xếp.
Mức độ log: ERROR
, WARN
, INFO
, DEBUG
và TRACE
.
ID của tiến trình.
Ký hiệu ---
ngăn cách để phân biệt bắt đầu của các nội dung log cụ thể.
Tên luông: Bao bởi ngoặc vuông(có thể bị cắt bớt ở đầu ra của console).
Tên logger: Thường là tên của class nguồn(thường viết tắt khi tên package dài và nằm lòng nhiều tầng).
Nội dung log.
Đầu ra console Cầu hình mặc định của log gửi các nội dung ra console khi chúng được ghi ra. Mức ERROR
, WARN
và INFO
là các nội dung được ghi mặc định.
Logback không có mức FATAL
. Nó được ánh xạ tới ERROR
3. Mã màu đầu ra
Khi terminal hỗ trợ ANSI, màu sắc đầu ra sử dụng để giúp cho việc đọc. Có thể cấu hình spring.output.ansi.enabled
với các giá trị hỗ trợ để ghi đè. Mã màu được ấu hình bằng cách sử dụng từ biến đổi %clr
. Với dạng đơn giản nhất bộ biến đổi màu đầu ra theo mức độ log như sau:
%clr(%5p)
Bảng dưới mô tả các mức log sẽ tương đương với các màu:
Mức độ | Màu | Nội dung |
---|---|---|
FATAL | Đỏ | Chỉ định các sự kiện lỗi rất nghiêm trọng có thể khiến ứng dụng bị hủy bỏ hoặc dừng lại. |
ERROR | Đỏ | Chỉ định các sự kiện lỗi có thể xảy ra mà vẫn cho phép ứng dụng tiếp tục chạy. |
WARN | Vàng | Chỉ định các tình hướng có thể gây hại cho ứng dụng đang chạy. |
INFO | Xanh | Chỉ định các thông báo cung cấp thông tin làm nổi bật tiến trình của ứng dụng ở cấp độ chi tiết. |
DEBUG | Xanh | Chỉ định các sự kiện thông tin chi tiết hữu ích để gỡ lỗi ứng dụng. |
TRACE | Xanh | Chỉ định các sự kiện thông tin chi tiết hơn cấp độ DEBUG. |
4. Ghi vào tệp
Mặc định của Spring Boot các log chỉ ghi ra console và không ghi ra các file, khi muốn ghi thêm vào file ngoài hiển thị ở console cần cấu hình logging.file
hoặc logging.path
trong application.properties
Dưới đây là các thuộc tính có thể sử dụng với logging.*
logging.file | logging.path | Ví dụ | Mô tả |
---|---|---|---|
- | - | Chỉ hiển thị ở console | |
Chỉ định tệp | - | dev.log | Ghi ra tệp log cụ thể. Các tên có là vị trí cụ thể hoặc thự mục liên quan thư mục hiện tại |
- | Thư mục cụ thể | /var/log | Ghi spring.log vào thư mục cụ thể. |
Các tệp khi có kích thước 10MB sẽ được xoay vòng(nén/xóa) đồng thời tạo ra file log mới, các nội dung mức ERROR
, WARN
vàn INFO
mặc định ghi vào. Kích thước có thể tùy chỉnh sử dụng thuộc tính logging.file.max-size.
5. Nhóm log
Trong một số trường hợp việc nhóm lại các log với nhau rất cần mà chúng có thể cấu hình cùng lúc. VD: Khi muốn đổi mức log cho các log liên quan Tomcat mà không thể nhớ các package cấp cao. Để giúp cho việc này, Spring Boot cho phép định nghĩa nhóm log trong môi trường Spring. VD: Sau đây sẽ định nghĩa nhóm tomcat
bằng cách thêm vào applicaiton.properties
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
Sau khi định nghĩa, có thể thay đổi mức log cho các log trong nhóm
logging.level.tomcat=TRACE
Tên | Logger |
---|---|
web | org.springframework.core.codec , org.springframework.http , org.springframework.web , org.springframework.boot.actuate.endpoint.web , org.springframework.boot.web.servlet.ServletContextInitializerBeans |
SQL | org.springframework.jdbc.core , org.hibernate.SQL |
6. Kết luận
Trong thực tế rất ít khi dùng đến mức TRACE vì nó chứa cả một số thông tin không cần thiết, kể cả việc lưu trữ thì kích thước tệp log tăng một cách đột biến, khi muốn điều tra cũng khó khăn. Việc set mức levels cho các môi trường như dev
, staging
, prod
tùy thuộc vào yêu cầu chi tiết của từng môi trường:
dev
: Khi phát triển luôn phải xử lý các trường thông thường và bất thường nên xét ở mứcDEBUG
cũng đủ để điều tra và xử lý.stg
: Khi đã phát triển xong cũng có lúc bị thiếu xót do vậy ở môi trường này cần mứcDEBUG
để điều tra các nguyên nhân gây lỗi trong hệ thống.prod
: Trước khi đến môi trường này đã qua hai môi trườngdev
vàstg
nên ở đây mức log có thể dùngINFO
vì trong đó đã bao gồmWARN
vàEROROR
, còn tùy thuộc vào yêu cầu có thể dùng mứcWARN
cho môi trường này.
Bình luận