✅ Checkpoint: Log có cấu trúc và log level

By Better Wise

Quiz

  1. 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.
  2. 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
  3. 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.
  4. 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ì đó".
  5. 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.
  6. 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.
  7. 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.
  8. 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.