JuniorKỹ năng lập trình

Khi nào ghi log ở mức warn, khi nào ở mức error, và không nên ghi gì vào log?

Người phỏng vấn muốn biết bạn có xem log như công cụ để người đến sau tìm nguyên nhân, và có biết phân loại sự kiện để lỗi thật không bị chìm hay không.

Cách phân loại đơn giản và dễ nhớ là hỏi "lỗi của ai". Mức info là chuyện bình thường, ví dụ một đơn hàng được nhận. Mức warn là người gọi gửi sai, như request bị từ chối vì dữ liệu không hợp lệ (mã 4xx): máy chủ làm đúng việc của nó. Mức error là máy chủ làm sai hoặc gặp tình huống không lường trước (mã 5xx), và cần có người xem.

Lý do phải tách: nếu mọi thứ đều ghi error, một website gửi sai năm trăm đơn sẽ tạo năm trăm dòng đỏ che mất một lỗi thật duy nhất của máy chủ. Lọc theo error lúc hai giờ sáng chỉ hữu ích khi mức error có ý nghĩa.

Một dòng log tốt trả lời được bốn câu: chuyện gì, lúc nào, của request nào, và quan trọng đến đâu. Vì vậy mỗi request nên có một mã riêng (request id) gắn vào mọi dòng của nó. Nếu bạn bọc một lỗi bằng lỗi khác, hãy giữ lỗi gốc trong cause để log vẫn nói được nguyên nhân.

Về những gì không nên ghi: dữ liệu cá nhân như tên, số điện thoại, và bí mật như mật khẩu, token, khóa API. File log hay được chép sang nhiều nơi, nên thứ gì đã vào log coi như đã lộ ra ngoài dự án. Khi từ chối một request vì dữ liệu sai, hãy ghi tên trường và lý do, không ghi giá trị người dùng gửi lên.

Điểm cộng: nhắc rằng không nên nuốt lỗi bằng khối catch rỗng, và khi trả lỗi 500 cho người gọi thì chỉ đưa một mã để tra, còn chi tiết nội bộ ở lại trong log.