LogZ là một thư viện ghi log nhẹ, hướng đến sự dễ sử dụng mà vẫn giữ được tính linh hoạt cao trong các tình huống thực tế. Nó mở rộng khả năng của logging chuẩn bằng cách hỗ trợ ghi nhiều đối số cùng lúc, định dạng JSON có thụt lề, luồng ghi theo ngày, và chèn trường tùy chọn một cách an toàn.
Tính năng nổi bật
- Hệ thống khởi tạo tức thì — không cần cấu hình phức tạp
- Hỗ trợ quay vòng file theo ngày (
%Y-%m-%d.log) hoặc kích thước (rotating handler) - Cho phép truyền nhiều giá trị vào một lệnh log — không bắt buộc chuyển đổi sang chuỗi trước
- Tự động định dạng nội dung dict/list thành JSON đa dòng với độ thụt lề tùy chỉnh
- Cơ chế
extrađược tích hợp sẵn, tránh lỗi khi thiếu trường trong format string - Mức độ ghi log mặc định là
DEBUG, dễ dàng điều chỉnh qua chuỗi hoặc mã số
Cài đặt
pip install logz
Sử dụng cơ bản
from logz import logger as log
log.debug("Bắt đầu xử lý")
log.info("Tải xong dữ liệu", extra={"module": "loader"})
log.warning("Cảnh báo: bộ nhớ thấp")
log.error("Lỗi kết nối mạng")
log.critical("Hệ thống không phản hồi")
try:
raise ValueError("Dữ liệu không hợp lệ")
except Exception as e:
log.exception("Xử lý ngoại lệ", extra={"step": "validation"})
Ghi nhiều giá trị cùng lúc
name = "Alice"
age = 32
scores = [89, 94, 77]
metadata = {"team": "backend", "env": "staging"}
log.info(name, age, scores, metadata)
Kết quả:
2024-05-21 14:22:08,102 INFO Alice 32 [89, 94, 77] {'team': 'backend', 'env': 'staging'}
Ghi vào tệp tin
Đặt đường dẫn tệp để kích hoạt ghi vào file (tự tạo handler nếu chưa tồn tại):
log.file = "logs/app.log" # Quay vòng theo kích thước (mặc định 10MB, giữ 5 bản sao)
log.file = "logs/%Y-%m-%d-runtime.log" # Quay vòng theo ngày
Tùy chỉnh mức độ ghi log
log.level = "WARNING" # hoặc log.level = 30
log.debug("Không xuất hiện") # bị bỏ qua
log.warning("Hiển thị") # hiển thị
Thay đổi định dạng đầu ra
log.format = "%(asctime)s | %(levelname)-8s | %(name)s | %(user)s | %(message)s"
log.info("Khởi tạo phiên", extra={"user": "admin"})
Định dạng JSON tự động
payload = {"status": "success", "duration_ms": 142.6, "items": ["A", "B", "C"]}
log.info(payload, indent=2)
Kết quả:
2024-05-21 14:25:33,417 INFO log None ->
{
"status": "success",
"duration_ms": 142.6,
"items": [
"A",
"B",
"C"
]
}