Giới Thiệu Về Hệ Thống Logging
Trong quá trình lập trình, đặc biệt là khi debug, việc kiểm tra log là một trong những nhiệm vụ không thể thiếu. Không có log, chúng ta khó có thể xác định lỗi ở đâu trong mã nguồn, từ đó, việc khắc phục trở nên gặp nhiều khó khăn. Điều này càng trở nên quan trọng hơn trong các hệ thống lớn phục vụ người dùng, khi mà việc theo dõi và phân tích log giúp phát hiện lỗi và cải thiện hiệu suất hệ thống.
Tầm Quan Trọng Của Logging
Hệ thống logging cho phép chúng ta:
- Phát hiện lỗi: Kiểm tra và giải quyết các vấn đề ảnh hưởng đến người dùng cuối.
- Theo dõi hoạt động: Giúp giám sát tình hình hoạt động của hệ thống và phát hiện sớm các dấu hiệu bất thường.
- Cải tiến sản phẩm: Từ việc phân tích log, các nhà phát triển có thể cải thiện hiệu suất cũng như trải nghiệm người dùng.
Xây dựng một hệ thống logging đáng tin cậy không chỉ giúp ích trong quá trình phát triển mà còn trong suốt vòng đời hoạt động của ứng dụng. Bài viết này sẽ cung cấp thông tin cần thiết để bạn có thể thiết kế và triển khai một hệ thống logging hiệu quả.
Chính Sách Logging
Trước khi bắt tay vào xây dựng hệ thống logging, bạn cần tự đặt ra một số câu hỏi căn bản:
- Tại sao (Why): Để làm gì? Mục đích của log là gì?
- Ai (Who): Bộ phận nào thực hiện việc ghi log (API, ứng dụng, v.v.)?
- Khi nào (When): Thời điểm nào thì log được tạo ra?
- Ở đâu (Where): Log sẽ được lưu trữ ở đâu (Slack, BigQuery, v.v.)?
- Nội dung gì (What): Thông tin nào sẽ được ghi log?
- Cách nào (How): Phương pháp nào sẽ được sử dụng để ghi log?
Các Cấp Độ Log
Sau khi xác định rõ mục đích, bạn cần phân loại log theo các mức độ, giúp dễ dàng theo dõi và quản lý:
Cấp Độ Log | Khái Niệm | Hành Động | Ví Dụ |
---|---|---|---|
FATAL | Ngăn cản hoạt động của hệ thống | Cần xử lý ngay | Không thể kết nối đến DB |
ERROR | Gây ra lỗi ngoài mong muốn | Khắc phục trong thời gian chạy | Không thể gửi email |
WARN | Vấn đề không phải là lỗi nhưng cần lưu ý | Cần xem xét | API xóa dữ liệu không đúng cách |
INFO | Thông báo khi bắt đầu và kết thúc xử lý | Không cần xử lý | Thông tin yêu cầu và phản hồi |
DEBUG | Thông tin về trạng thái hoạt động của hệ thống | Chỉ nên dùng trong môi trường phát triển | Thông tin chi tiết từ hàm |
TRACE | Thông tin chi tiết hơn DEBUG | Chỉ nên dùng trong môi trường phát triển | N/A |
Phân Loại Log
Có các loại log chính mà bạn nên biết:
Log Hệ Thống (System Log)
- Mục đích: Hỗ trợ debug khi có lỗi xảy ra.
- Ai: Hệ thống tự ghi log.
- Khi nào: Ghi log khi gặp lỗi.
- Ở đâu: Đưa đến các kênh thông báo cho nhà phát triển.
- Nội dung: Cung cấp stack trace và thông tin chi tiết khác.
- Cách thức: Sử dụng các công cụ quản lý log để thông báo.
Log Truy Cập (Access Log)
- Mục đích: Theo dõi việc gửi và nhận yêu cầu.
- Ai: Hệ thống hoặc từ cơ sở hạ tầng.
- Khi nào: Ghi log khi có yêu cầu gửi hoặc nhận.
- Ở đâu: Tại các công cụ phân tích log.
- Nội dung: Thông tin ai đã truy cập và cách thức truy cập.
- Cách thức: Phân loại log dựa theo nhu cầu của hệ thống.
Log Hành Động (Action Log)
- Mục đích: Phân tích hành vi người dùng.
- Ai: Hệ thống hoặc công cụ bên ngoài.
- Khi nào: Khi có ghi nhận hành động của người dùng.
- Ở đâu: Các công cụ phân tích dữ liệu như BigQuery.
- Nội dung: Tùy thuộc vào mục tiêu phân tích.
- Cách thức: Linh hoạt tùy theo mục đích.
Log Xác Thực (Auth Log)
- Mục đích: Theo dõi quá trình xác thực người dùng.
- Ai: Hệ thống thực hiện ghi log.
- Khi nào: Khi người dùng tiến hành xác thực.
- Ở đâu: Tại các công cụ quản lý log.
- Nội dung: Thông tin người dùng và phương thức xác thực.
- Cách thức: Tùy thuộc vào phương thức xác thực đã sử dụng.
Ví Dụ Minh Họa
Chúng ta sẽ áp dụng lý thuyết vào một dự án cụ thể. Bạn có thể tìm hiểu mã nguồn chi tiết tại: GitHub.
Lựa Chọn Thư Viện Log
Chúng ta sẽ sử dụng log4js
, một thư viện giúp tổ chức log theo các cấp độ đã nêu.
Cài Đặt
Bước đầu tiên là tạo một class Logger với các cấp độ log khác nhau. Sau đó, chúng ta sẽ áp dụng Logger vào dự án dựa trên framework NestJS, thông qua hình thức Interceptor để dễ dàng ghi nhận log của request và response.
Kết Luận
Bài viết đã trình bày kiến thức thiết yếu về việc thiết kế hệ thống logging. Hy vọng bạn đã hiểu được tầm quan trọng của việc ghi log trong vận hành của hệ thống và cách xây dựng một hệ thống log tốt.
Cảm ơn bạn đã theo dõi bài viết này. Hẹn gặp lại ở những bài viết sau. Chúc các bạn lập trình vui vẻ!
source: viblo