Hướng dẫn python logger
Trong quá trình vận hành và sử dụng phần mềm, "phần mềm" cũng có lúc khỏe lúc yếu, lúc hoạt động trơn tru, lúc lại dặt dẹo. Vậy có những cách nào để "phần mềm" thông báo trạng thái hoạt động của mình với người dùng, IT-OPs, lập trình viên ? Show Tại sao phải đặt log ?Thông thường trong quá trình xây dựng và phát triển phần mềm, các lập trình viên sẽ đặt các đoạn lệnh Vậy thì muốn check lỗi của phần mềm thì IT-OPs/Dev phải làm thế nào ? Nếu bạn mang câu hỏi này đi hỏi các lập trình viên có kinh nghiệm, câu trả lời dễ tìm thấy là "Ghi lỗi vào log file để có lỗi còn biết mà check & fix lỗi chứ" (Nhiều khi là đi "ăn vạ", "bắt đền" nếu lỗi phát sinh từ hệ thống khác). Một số lập trình viên có thói quen đặt câu lệnh print ra màn hình console các thông tin trong quá trình ứng dụng chạy để "debug chay", trước khi release thì thực hiện "rào" (thực hiện chuyển command thành comment) hoặc xóa các dòng lệnh print này. Thật là mất thời gian và nếu có sai sót lại mất thêm cả thời gian để fix lỗi. Log file có phải chỉ để ghi lỗi ?Log file thường được ưu tiên để ghi vào các lỗi nhưng có những hệ thống đặc biệt, ngoài log lỗi thì log file còn có thể chứa các thông tin liên quan đến các action của người dùng vào hệ thống. Qua hai đầu mục trên, chúng ta đã thấy tầm quan trọng của log file, vậy đặt log như thế nào cho hiệu quả và dễ dàng khai thác thông tin sau này? Ghi log thế nào cho hiệu quả?1. Format logĐể việc sử dụng log đạt hiệu quả, trong mỗi team hoặc mỗi công ty cần có một chuẩn đặt log chúng để dễ dàng sử dụng sau khi thu thập log về chung một hệ thống lưu trữ. Một cụm log nên chứa các thông tin sau:
Ví dụ: Một kiểu format log như sau:
2. Chú ý phân loại log-levelNhư đã viết ở trên, log-level được định nghĩa và sử dụng tùy mục đích sử dụng và phân loại của từng công ty. Dưới đây là một cách định nghĩa (mà các bạn có thể tham khảo): DEBUG:
Ví dụ: Hệ thống dữ liệu trên PRODUCTION thường lớn hơn nhiều so với DEVELOPING nên số lượng trường hợp xảy ra khi áp dữ liệu vào phần mềm cũng nhiều hơn. Các test-case có thể chưa bao quát được hết các lỗi --> Việc đặt debug có thể giúp developer/tester có thể giả lập lại được chính xác toàn bộ thao tác, workflow của cụm dữ liệu khi đi vào/đi ra khỏi phần mềm. INFO: WARN
(WARNING): ERROR: Ví dụ: Khách hàng thanh toán tiền cho dịch vụ A nhưng không thể trừ tiền của khách hàng do hệ thống thanh toán đang quá tải. Mỗi ERROR sẽ được ghi vào log-files để sau này có thể đối soát được lỗi quá tải đã gây ảnh hưởng đến bao nhiêu khách hàng. FATAL/CRITICAL: Ví dụ: Ghi chú: Với các case dạng này thì ngoài việc ghi vào log file thì nên thực hiện thông báo trực tiếp qua các kênh truyền thông với IT-Ops hoặc developer. 3. Thư viện hỗ trợ ghi log ?Một lập trình viên, việc ghi log theo format như trên là một thử thách khá lớn về format chuỗi, format thời gian, .... Với ngôn ngữ lập trình Python, không cần phải cài đặt/thêm bớt library của hãng thứ 3 vào project của mình. Mọi thứ đã có sẵn trong module logging. Việc của lập trình viên chỉ là import vào sử dụng. Đặt log với logging trong pythonNgôn ngữ lập trình Python cung cấp một module cho phép các lập trình viên thực hiện việc đặt log trong ứng dụng của mình là logging.
Chúng ta sẽ cùng nhau khám phá về logging qua các ví dụ dưới đây nhé. 1. Đặt log, đưa dữ liệu vào màn hình console.
Mặc định thì log sẽ được đẩy vào màn hình console, tất nhiên là màn hình console chỉ dành cho lập trình viên khi thực hiện debug nên các ứng dụng khi đưa lên PRODUCTION thì cần đặt log vào một log file
Lưu ý: Trường
dữ liệu level sẽ thiết lập dữ liệu log nào được phép hiển thị theo từng cấp bậc. Thứ tự các level được mặc định như sau: Tại một phiên làm việc, logging chỉ nhận một giá trị level, muốn thay
đổi log level, tùy chỉnh nhiều hơn, chúng ta nên sử dụng các đối tượng handlers của logging. 2. Đối tượng logging handlersCác đối tượng logging handlers, chúng ta có thể tìm hiểu chúng ở đường dẫn sau: https://docs.python.org/3/library/logging.handlers.html Để tìm hiểu về các đối tượng này, chúng ta sẽ đi đến ví dụ dưới đây Các thông tin mới:
Đoạn script trên sẽ có output ra cả file và màn hình console. Theo như log-level thì trên file log sẽ in ra từ cụm Như đã nêu ở trên, trong phần
log có thêm cụm thông tin tên file - dòng bao nhiêu [in .\handlers.py:26], có được đoạn dữ liệu này là do có đoạn cấu hình 3. Rotate log file.Sau một quãng thời gian làm việc, file log lớn quá gây khó khăn cho việc đọc/ghi/theo dõi log. Logging module cung cấp việc thực hiện tách file log thành nhiều file khác nhau theo kích thước hoặc thời gian. Thực hiện tách log file theo dung lượng.
Sau khi thực thi, log file sẽ bung ra dưới dạng:
Đoạn tiếp theo của log: Tách log file theo thời gian
Bật tắt logging.Nếu không cần đến logging –> tắt chế độ ghi log: Khi cần bật lại: Kết luậnTrong nội dung bài viết này, tôi vừa trình bày với các bạn một số vấn đề liên quan đến tầm quan trọng việc ghi log trong xây dựng ứng dụng phần mềm. Đi kèm với phần lý thuyết là phần thực hành liên quan đến hướng dẫn sử dụng module logging trong ngôn ngữ lập trình Python. |