Ghi log là gì

Photo by Arian Darvishi on Unsplash

Log là gì?

Log hiểu 1 cách đơn giản là những thứ dùng để lưu vết những thông tin được thông báo trong quá trình hoạt động của một ứng dụng.

Log là một phần rất cần thiết trong quá trình phát triển 1 ứng dụng. Tuy nhiên, không phải tất cả lập trình viên đều nghiêm túc về vấn đề này và chỉ những bạn phải tốn hàng giờ đồng hồ để debug thì mới thật sự thấm thía với câu nói này.

Tại sao phải viết Log?

Mình cho các bạn 1 vài trường hợp thực tế mà mình đã từng gặp:

Câu chuyện 1: Vào 1 ngày giông bão, mình bị báo lỗi là ứng dụng check in check out hàng thường hay bị crash. Lúc này, QA đã nhảy vào test với rất nhiều trường hợp online và cả offline nhưng vẫn không làm sao crash app được. Tiếp theo, đưa tiếp cho Dev code phần này và Dev đã nhảy vào Debug để mong tìm được vấn đề nhưng vẫn không tìm ra vấn đề. Lúc này, áp lực của team ngày càng tăng vì số lượng báo lỗi crash app cũng tăng theo nhưng vấn đề thì vẫn không tìm ra.

Tiếp theo, mình đã mở log ứng dụng lên xem và ôi chẳng có thông tin gì Y_Y. Rồi mình đã phải yêu cầu bổ sung log vào toàn bộ ứng dụng, thông báo lỗi ngay lập tức lên Slack và đây là lúc mình phát hiện ra vấn đề.

Do ứng dụng hỗ trợ làm việc offline nên khi có mạng lại sẽ đẩy dữ liệu đến Server nhưng vô tình có dữ liệu check in đã xử lí rồi nên Server trả về lỗi 400. Tuy nhiên, ứng dụng check in check out lại không xử lí riêng cho trường hợp này nên thành ra ứng dụng cứ gọi đến Server liên tục rồi thành vòng lặp mãi mãi và còn tăng theo số lượng đơn hàng.

Qua câu chuyện này các bạn có thể thấy rằng có log file đã là 1 chuyện nhưng mình log cái gì là 1 chuyện khác nếu bạn log không có tâm thì bạn chính là người phải chịu khổ sau này và hoàn toàn có thể rơi vào trường hợp trên: QA, Dev code phần này, Debug và tốn rất nhiều thời gian nhưng hoàn toàn không kiếm được vấn đề.

Câu chuyện 2: Trong lúc QA đang test 1 task lớn liên quan nhiều service và có multi-tenant thì phát hiện lỗi và báo cho Dev A. Dev A nhìn báo lỗi “Wrong Tenant. Please contact to Administrator.” xong thì kiểm tra thông tin tenant đã truyền đúng chưa và nói tới Dev B liên quan tới làm phần tenant. Dev B nhìn xem thì nói truyền sai tenant nên báo lỗi vậy đúng rồi. Thế là hành trình tranh cãi và chứng minh truyền đúng dữ liệu của Dev A. Sau 1 hồi cự cãi thì Dev B đã kiểm tra bằng việc debug thì phát hiện ra rằng config Database bị sai password nên không kết nối được.

Đọc tới đây mình nghĩ nhiều bạn sẽ phải bất ngờ giống mình sao lỗi Database mà lại đi báo “Wrong Tenant”. Đây chính là vấn đề.

Bạn có thể trả lỗi chung về cho User “Wrong Tenant. Please contact to Administrator.” nhưng trong log bạn phải lưu lại dấu vết để biết vấn đề lỗi thật sự.

Chứ như trường hợp này tất cả trường hợp lỗi đều cùng 1 câu và khi có lỗi xảy ra chính bạn Dev B cũng không xác định được lỗi chính xác trong log và phải debug vừa gây tốn thời gian cho Dev B lẫn Dev A.

Câu chuyện tự hào ^_^: Chuyện xảy ra vào 1 ngày đẹp trời và mình đã nhận được 1 yêu cầu production support là data gửi tới Server không đúng như khách hàng mong đợi. Như 1 thói quen việc đầu tiên mình làm là kiểm tra Log.

Đầu tiên là API Log và mình thấy request/response đều đúng nhưng vì sao data lưu trên Server lại không giống trong API log. Tiếp theo, mình đã vào xem system log và đây mình đã phát hiện ra vấn đề. Ngay tại thời điểm khách hàng thực hiện 1 yêu cầu cập nhật data thì có 1 Schedule chạy ngầm đã vô tình gây lỗi cập nhật cùng data với khách hàng đó.

Và các bạn biết mình tốn bao lâu để xác định lỗi này không?

Chỉ là 30 phút, và trong ngữ cảnh mình không hề biết có schedule chạy ngầm này vì dự án lớn và có nhiều người tham gia. 1 Điểm quan trọng nhất giúp mình có thể phát hiện ra lỗi này trong thời gian ngắn vậy là người bạn vô tình tạo ra lỗi đó đã làm rất tốt 1 việc là ghi log lại từng bước của schedule chạy ngầm này dựa vào những dòng log đó mình đã xác định được nguyên nhân lỗi.

Do đó, khi ứng dụng có những dòng log tốt sẽ là 1 sự hỗ trợ lớn cho người chịu trách nhiệm bảo trì ứng dụng có thể hiểu và nắm bắt được ứng dụng cũng như code hoạt động như thế nào [Đặc biệt là trong các trường hợp đa luồng như trên]

Lời kết:

Đối với mình log là 1 kĩ năng rất quan trọng đối với lập trình viên. Đặc biệt là ở Senior Level. Khi bạn ở Senior Level thì không chỉ code để chạy thôi mà bạn còn phải nghĩ tới trước, trong và sau quá trình phát triển.

Log tốt thể hiện được khả năng nhìn xa trông rộng của bạn biết bỏ thời gian ra viết log để tiết kiệm thời gian debug sau này. Ngoài ra, log tốt còn giúp người chịu trách nhiệm bảo trì đọc hiểu code và phát hiện những lỗi chỉ xảy ra khi chạy trên môi trường thực tế.

Nếu bạn đã quan tâm đến log thì không thể bỏ qua các chia sẻ về “Phân loại log và những điều cần biết”. Đón xem bài viết tiếp theo của mình nhé!

Like what you’re reading? Follow us on LinkedIn and Medium. We are developing the digital layer for 7-Eleven Vietnam including the core retail system as well as customer-facing components like 7-Rewards.

Chủ Đề