Checkpoint: Log có cấu trúc và log level
Quiz
- Vì sao log dạng text thuần (ví dụ: "payment failed for user 4821 order 9931") gây tốn thời gian khi điều tra sự cố?
- Vì log text luôn chiếm dung lượng lớn hơn log JSON.
- Vì các tool như Loki hay CloudWatch không đọc được log text.
- Vì log text không có timestamp nên không sắp xếp được.
- Vì thông tin nằm trong câu văn chứ không nằm trong field, nên máy không lọc hay đếm chính xác được.
- Bộ field tối thiểu cho một dòng log của app nhỏ gồm những field nào?
- ts, level, service, request_id, message
- ts, level, stack, user_id, password
- ts, service, headers, body, query
- message, error_code, duration_ms, route, method
- Một dòng log ghi "payment_failed for order 9931" bị coi là lỗi thiết kế. Cách sửa đúng là gì?
- Đặt message là hằng số payment_failed, còn order_id và error_code đưa ra field riêng.
- Log nguyên object response để có đủ thông tin.
- Đổi message thành "something went wrong" cho ngắn gọn.
- Giữ nguyên message nhưng thêm timestamp có milliseconds.
- Theo bài học, khi nào một tình huống nên log ở mức error?
- Khi gọi API đối tác chậm nhưng retry đã thành công.
- Khi user nhập sai mật khẩu hoặc dữ liệu validation.
- Bất cứ khi nào code ném ra exception.
- Khi thao tác thất bại và cần có người xem, tức là "cần ai đó làm gì đó".
- Ngưỡng log (threshold) thường được đặt thế nào ở môi trường production và dev?
- Cả hai môi trường đều đặt error để tiết kiệm chi phí.
- Production đặt info, dev đặt debug.
- Cả hai môi trường đều đặt debug để không bỏ sót gì.
- Production đặt debug, dev đặt info.
- Một job đồng bộ chạy mỗi 5 phút, xử lý 500 bản ghi, trong đó 3 bản ghi lỗi và đã được đẩy vào hàng đợi thử lại. Cách log hợp lý nhất là gì?
- 3 dòng error cho 3 bản ghi lỗi, không log gì thêm.
- Một dòng info cho cả lô kèm total, failed, duration_ms; và một dòng warn cho các bản ghi lỗi đã được retry.
- 500 dòng info, mỗi bản ghi một dòng.
- Không log gì vì job đã tự xử lý được.
- Nguyên tắc an toàn nhất khi log dữ liệu là dùng ____ các field được phép ghi, thay vì liệt kê các field nguy hiểm rồi quên một cái là thủng.
- Hãy tự đánh giá: bạn có viết được một dòng log JSON cho sự kiện "gửi email xác nhận cho đơn 9931 thất bại do SMTP timeout sau 5 giây" không? Viết ra giấy hoặc editor rồi đối chiếu với rubric.
Sign in to submit answers.