Bạn có biết?
Sản phẩm vừa sập lúc 2 giờ sáng, và bạn mở log ra… hàng nghìn dòng console.log không đầu không cuối, không biết request nào lỗi, không biết bắt đầu từ đâu. Structured logging thay đổi tất cả: mỗi dòng log là một JSON có cấu trúc, có request ID xuyên suốt, có đủ context — tra cứu bằng grep/jq, gửi thẳng vào Elasticsearch/Datadog, dựng dashboard chỉ trong vài phút.
Vì sao console.log không đủ cho production?
- Không có cấu trúc — không grep được theo field, không query được
- Không có level — không phân biệt debug/info/warn/error
- Không có context — log "user not found" nhưng user nào? request nào?
- Không gom được — nền tảng log (ELK, Datadog, CloudWatch) cần JSON để parse tự động
- Chặn event loop —
console.logđồng bộ, log nhiều sẽ làm chậm ứng dụng
Chọn thư viện: pino hay winston?
Bài này dùng pino — chuẩn hiện đại, nhanh, JSON thuần (đúng tinh thần 12-Factor từ bài trước).
| Tiêu chí | pino | winston |
|---|---|---|
| Tốc độ | Rất nhanh (JSON native) | Chậm hơn (transport phức tạp) |
| Định dạng | JSON mặc định | JSON tùy chọn, nhiều format |
| Transport | Qua worker thread (pino-pretty, pino-socket) | Nhiều transport tích hợp sẵn |
| Phù hợp | API hiệu năng cao, hiện đại | Hệ thống cũ, cần transport đa dạng |
Cài đặt cơ bản
npm install pino pino-http
import pino from "pino";
import pinoHttp from "pino-http";
// Logger chính — in JSON ra stdout (production) / đẹp khi dev
const logger = pino({
level: process.env.LOG_LEVEL ?? ,
: [, , ],
:
process.. ===
? { : , : { : } }
: ,
});
httpLogger = ({ logger });
app.(httpLogger);
logger.({ : , : }, );
0 bình luận
Đang tải bình luận...
Để lại bình luận