Logger: Từ Built-in đến Winston
📋 Agenda
Thời gian đọc ước tính: ~15 phút
Sau bài này, bạn sẽ:
- ✅ Hiểu cơ chế hoạt động của NestJS Logger và hệ thống Log Level
- ✅ Phân biệt được khi nào dùng Built-in Logger và khi nào cần Winston
- ✅ Tự tay cấu hình Winston với Console + File transport cho production
- ✅ Tránh được 3 pitfalls phổ biến trong logging NestJS
Prerequisites:
- 🔹 Biết cơ bản về NestJS (Module, Service, Controller)
- 🔹 Đã từng chạy một NestJS app ít nhất một lần
- 🔹 Hiểu khái niệm Dependency Injection (DI)
❓ Vấn đề & Giải pháp
Vấn đề (Problem Statement):
console.logkhông có log level → không thể tắt debug log khi ra production.- Không có timestamp, context → không biết log đến từ module nào, lúc nào.
- Log chỉ xuất ra Console → không thể lưu file để phân tích sau.
- Khi hệ thống crash, tìm lỗi trong đống
console.logkhông có cấu trúc là cực hình.
Giải pháp (Solution):
NestJS cung cấp Logger built-in với 5 log levels và context hỗ trợ inject DI. Khi cần nâng cao (file rotation, JSON format cho ELK/Datadog), tích hợp Winston thông qua nest-winston — giữ nguyên API NestJS nhưng tăng sức mạnh vượt trội.
📖 Kiến trúc Logger trong NestJS
Định nghĩa: NestJS Logger là một service có thể inject vào bất kỳ component nào, cung cấp logging có cấu trúc (structured logging) với context và log level.
Luồng log:
- Code gọi
this.logger.log('message', 'Context') - NestJS forward tới
LoggerServiceđang active - Logger Service format và route tới các Transport