[Một Gói Mỗi Ngày] pino - Trình Ghi Nhật Ký Chúng Tôi Tin Cậy trong Dự Án Node.js
By hungpd, at: 18:25 Ngày 08 tháng 6 năm 2025
Thời gian đọc ước tính: __READING_TIME__ minutes
![[One Package Per Day] pino - The Logger We Trust in Node.js Projects](/media/filer_public_thumbnails/filer_public/ad/85/ad854393-ffb3-4df5-8289-a75820e66da7/pino_logging_-_nodejs.png__1500x900_crop_subsampling-2_upscale.png)
![[One Package Per Day] pino - The Logger We Trust in Node.js Projects](/media/filer_public_thumbnails/filer_public/ad/85/ad854393-ffb3-4df5-8289-a75820e66da7/pino_logging_-_nodejs.png__400x240_crop_subsampling-2_upscale.png)
Khi xây dựng các ứng dụng Node.js mạnh mẽ, ghi nhật ký là một trong những siêu anh hùng bị đánh giá thấp nhất. Nó giúp chúng ta trong quá trình gỡ lỗi, giúp chúng ta theo dõi lỗi trong sản xuất và cung cấp khả năng quan sát quan trọng về cách hệ thống của chúng ta hoạt động.
Trong những năm qua, chúng tôi đã thử nhiều trình ghi nhật ký - từ console.log
(vâng, có lỗi) đến winston đến bunyan. Nhưng trong vài năm gần đây, một gói đã giành được sự tin tưởng hoàn toàn của chúng tôi: pino.
Nếu bạn đang tìm kiếm tốc độ, cấu trúc và sự đơn giản, đừng tìm đâu xa.
pino là gì?
pino (có nghĩa là cây thông trong tiếng Ý) là một trình ghi nhật ký JSON cực nhanh cho Node.js. Nó được thiết kế để sử dụng trong sản xuất, nơi hiệu suất và nhật ký có cấu trúc là rất quan trọng.
Nó tự nhận là trình ghi nhật ký nhanh nhất hiện nay, và tiết lộ: nó đáp ứng được điều đó.
Tại sao chúng tôi sử dụng pino trong mọi dự án Node
1. Cực nhanh
Các bài kiểm tra hiệu năng cho thấy pino có thể ghi hơn 30.000 dòng mỗi giây mà không gặp khó khăn. Điều đó nhanh hơn winston gấp 10 lần trong nhiều trường hợp. Nếu bạn quan tâm đến hiệu năng (và bạn nên quan tâm), đây là một bước ngoặt.
const pino = require('pino');
const logger = pino();
logger.info('Hello world');
Điều này chạy nhanh hơn cả việc bạn uống cà phê buổi sáng.
2. Ghi nhật ký có cấu trúc (JSON FTW)
pino ghi tất cả mọi thứ ở định dạng JSON. Điều đó có vẻ ồn ào lúc đầu, nhưng nó rất hữu ích cho các nền tảng tổng hợp nhật ký như:
Ví dụ đầu ra:
{
"level": 30,
"time": 1717481229491,
"pid": 9094,
"hostname": "glinteco-dev",
"msg": "Server started on port 3000"
}
Nhật ký có cấu trúc = nhật ký có thể tìm kiếm = gỡ lỗi tốt hơn.
3. Hoạt động tốt với TypeScript
Nếu bạn đang sử dụng TypeScript, pino cung cấp các kiểu dữ liệu ngay lập tức và tích hợp tốt với các mức độ nhật ký, trình tuần tự hóa tùy chỉnh và phương thức nhật ký. Bạn thậm chí có thể tự định nghĩa giao diện nhật ký của mình để thực thi cấu trúc.
4. Chi phí thấp trong sản xuất
pino ghi nhật ký không đồng bộ theo mặc định. Điều đó có nghĩa là không chặn luồng chính của bạn. Nó thậm chí còn đề xuất sử dụng công cụ dòng lệnh pino-pretty để xử lý nhật ký trong quá trình phát triển để bạn không làm mất hiệu năng trong sản xuất.
Trong môi trường phát triển:
node app.js | pino-pretty
Trong môi trường sản xuất:
node app.js >> logs.json
Hiệu quả và thông minh.
5. Linh hoạt và mở rộng
-
Bạn muốn xóa các trường nhạy cảm?
-
Bạn muốn có trình tuần tự hóa tùy chỉnh?
-
Bạn cần trình ghi nhật ký con cho các mô-đun khác nhau?
-
Bạn muốn ghi nhật ký vào tệp, stdout hoặc luồng bên ngoài?
pino đủ linh hoạt để mở rộng cùng với ứng dụng đang phát triển của bạn.
Cài đặt điển hình tại Glinteco
// logger.ts
import pino from 'pino';
export const logger = pino({
level: process.env.LOG_LEVEL || 'info',
redact: ['req.headers.authorization'], // ẩn thông tin mật
transport:
process.env.NODE_ENV === 'development'
? {
target: 'pino-pretty',
options: { colorize: true },
}
: undefined,
});
Sau đó trong bất kỳ tệp nào:
import { logger } from
'./logger';
logger.info('App is starting...');
pino so với winston so với bunyan
Suy nghĩ cuối cùng
Ghi nhật ký không nên là một suy nghĩ muộn màng. Nếu bạn đang xây dựng bất cứ thứ gì trong Node.js mà có thể một ngày nào đó đạt đến sản xuất, hãy tự làm điều này: bỏ console.log
và cài đặt pino.
Nhanh chóng, có cấu trúc và đáng tin cậy - đó là trình ghi nhật ký mà chúng tôi tin tưởng.