Bạn đã bao giờ gặp khó khăn khi gỡ lỗi mã Python của mình chưa?
Là một lập trình viên mới bắt đầu, bạn có thể đã sử dụng câu lệnh
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
3—để in ra các giá trị nhất định trong các lần chạy chương trình của mình—để kiểm tra xem mã có hoạt động như mong đợi không. Sử dụng các câu lệnh logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
3 để gỡ lỗi có thể hoạt động tốt đối với các chương trình Python nhỏ hơn. Tuy nhiên, khi bạn bắt đầu làm việc với các dự án lớn hơn và phức tạp hơn, bạn sẽ cần một nhật ký liên tục chứa nhiều thông tin hơn về hành vi của mã để giúp bạn gỡ lỗi và theo dõi lỗi một cách có hệ thốngTrong hướng dẫn này, bạn sẽ học cách thiết lập ghi nhật ký trong Python bằng mô-đun ghi nhật ký tích hợp. Bạn sẽ tìm hiểu kiến thức cơ bản về ghi nhật ký, ghi nhật ký các giá trị biến và ngoại lệ, định cấu hình trình ghi nhật ký và trình định dạng tùy chỉnh, v.v.
Ngoài ra, bạn cũng sẽ tìm hiểu cách SDK Python của Sentry có thể giúp bạn giám sát các ứng dụng của mình và đơn giản hóa quy trình gỡ lỗi. Sentry tích hợp nguyên bản với mô-đun ghi nhật ký tích hợp sẵn của Python và cũng cung cấp thông tin chi tiết về cả lỗi và các vấn đề về hiệu suất trong ứng dụng của bạn
Bắt đầu nào…
Bắt đầu đăng nhập bằng Python
Python đi kèm với mô-đun ghi nhật ký mà chúng ta sẽ sử dụng trong hướng dẫn này. Vì vậy, bạn có thể tiếp tục và nhập nó vào môi trường làm việc của mình
import logging
Mô-đun ghi nhật ký tích hợp của Python cung cấp chức năng dễ sử dụng và năm cấp độ ghi nhật ký có mức độ nghiêm trọng tăng dần. gỡ lỗi [10], mức ghi nhật ký thấp nhất đến quan trọng [50], mức cao nhất
Hãy liệt kê các cấp độ ghi nhật ký khác nhau
Gỡ lỗi [10]. Gỡ lỗi là mức ghi nhật ký thấp nhất;
Thông tin [20]. Thông tin là mức ghi nhật ký thấp thứ hai được sử dụng để ghi lại thông tin trên một đoạn mã hoạt động như dự kiến
Cảnh báo [30]. Cảnh báo được sử dụng để ghi lại các sự kiện mà bạn nên chú ý, vì chúng có khả năng gây ra sự cố trong hoạt động của ứng dụng trong tương lai. Nếu bạn không đặt mức ghi nhật ký một cách rõ ràng thì theo mặc định, quá trình ghi nhật ký sẽ bắt đầu từ mức cảnh báo
Lỗi [40]. Đây là mức ghi nhật ký cao thứ hai; . một phần của ứng dụng không hoạt động như mong đợi và việc thực thi mã không thành công
Quan trọng [50]. Như tên gợi ý, cấp độ ghi nhật ký này ghi lại một sự kiện quan trọng của nhiệm vụ và việc không khắc phục điều này có thể khiến ứng dụng ngừng hoạt động
Đoạn mã sau đây cho thấy cách bạn có thể sử dụng tất cả năm cấp độ ghi nhật ký với cú pháp.
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
5logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
Bạn sẽ thấy rằng các thông báo tương ứng với cảnh báo, lỗi và nghiêm trọng được ghi vào bảng điều khiển, trong khi gỡ lỗi và thông tin thì không
WARNING:root:A WARNING
ERROR:root:An ERROR
CRITICAL:root:A message of CRITICAL severity
Điều này là do, theo mặc định, chỉ các thông báo tương ứng với cấp độ cảnh báo ghi nhật ký trở lên mới được ghi vào bảng điều khiển. Tuy nhiên, bạn có thể sửa đổi điều này bằng cách định cấu hình trình ghi nhật ký để bắt đầu ghi nhật ký từ một cấp độ cụ thể mà bạn chọn
Phương pháp đăng nhập vào bảng điều khiển này không hữu ích hơn việc sử dụng câu lệnh
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
3. Trong thực tế, bạn có thể muốn ghi các thông báo này vào một tệp nhật ký—chứa nhật ký qua các lần thực thi—mà sau đó bạn có thể sử dụng làm nhật ký gỡ lỗi của mìnhGhi chú. Trong ví dụ được giải thích trong hướng dẫn này, tất cả mã nằm trong tệp
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
7 và khi chúng tôi cấu trúc lại mã hiện có hoặc thêm các mô-đun mới, chúng tôi sẽ nêu rõ ràng logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
8 để giúp bạn theo dõiCách đăng nhập vào một tệp trong Python
Để thiết lập ghi nhật ký cơ bản vào một tệp, bạn có thể sử dụng hàm tạo
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
9, như minh họa bên dướilogging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
0Tiếp theo, hãy phân tích cú pháp trên để định cấu hình bộ ghi gốc
0. Đây là cấp độ bạn muốn bắt đầu đăng nhập. Nếu điều này được đặt thành thông tin, thì tất cả các thông báo tương ứng với gỡ lỗi sẽ bị bỏ quaWARNING:root:A WARNING ERROR:root:An ERROR CRITICAL:root:A message of CRITICAL severity
1. Tham sốWARNING:root:A WARNING ERROR:root:An ERROR CRITICAL:root:A message of CRITICAL severity
1 biểu thị đối tượng xử lý tệp. Bạn có thể chỉ định tên của tệp để đăng nhậpWARNING:root:A WARNING ERROR:root:An ERROR CRITICAL:root:A message of CRITICAL severity
3. Đây là một tham số tùy chọn chỉ định chế độ mà bạn muốn làm việc với tệp nhật ký được chỉ định bởi tham sốWARNING:root:A WARNING ERROR:root:An ERROR CRITICAL:root:A message of CRITICAL severity
1. Đặt chế độ tệp thành ghi [_______55] sẽ ghi đè lên nhật ký mỗi khi mô-đun được chạy.WARNING:root:A WARNING ERROR:root:An ERROR CRITICAL:root:A message of CRITICAL severity
3 mặc định là append [WARNING:root:A WARNING ERROR:root:An ERROR CRITICAL:root:A message of CRITICAL severity
7] có nghĩa là bạn sẽ có một bản ghi nhật ký các sự kiện trong tất cả các lần chạy của chương trìnhWARNING:root:A WARNING ERROR:root:An ERROR CRITICAL:root:A message of CRITICAL severity
Sau khi chạy mô-đun
WARNING:root:A WARNING
ERROR:root:An ERROR
CRITICAL:root:A message of CRITICAL severity
8, bạn sẽ thấy rằng tệp nhật ký WARNING:root:A WARNING
ERROR:root:An ERROR
CRITICAL:root:A message of CRITICAL severity
9 đã được tạo trong thư mục làm việc hiện tạiVì chúng tôi đặt mức ghi nhật ký thành thông tin, nên bản ghi nhật ký hiện chứa thông báo tương ứng với INFO
Các bản ghi trong tệp nhật ký có định dạng.
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
00. Theo mặc định, logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
01 là bộ ghi nhật ký của logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
02, vì chúng tôi chưa định cấu hình bộ ghi nhật ký tùy chỉnhNgoài thông tin cơ bản ở trên, bạn cũng có thể muốn ghi lại dấu thời gian mà một thông báo cụ thể đã được ghi lại để giúp kiểm tra nhật ký dễ dàng hơn. Bạn có thể làm điều này bằng cách chỉ định tham số
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
03 trong hàm tạo, như hình bên dướiimport logging
5Có nhiều thuộc tính bản ghi nhật ký khác mà bạn có thể sử dụng để tùy chỉnh cách các thông báo xuất hiện trong tệp nhật ký. Trong khi thiết lập bộ ghi nhật ký
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
02 như đã giải thích ở trên, vui lòng đảm bảo chỉ chạy logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
05 một lần—thường là ở phần đầu của chương trình trước khi ghi nhật ký. Các cuộc gọi tiếp theo không thay đổi bất cứ điều gì trừ khi bạn đặt tham số logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
06 thành logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
07Ghi nhật ký các biến và ngoại lệ trong Python
Bây giờ, hãy sửa đổi tệp
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
7. Giả sử, có hai biến x và y và chúng tôi muốn tính giá trị của x/y. Chúng tôi biết rằng chúng tôi sẽ gặp phải ZeroDivisionError khi y = 0. Chúng tôi có thể xử lý trường hợp này như một ngoại lệ bằng cách sử dụng các khối logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
09 và import logging
50Tiếp theo, chúng tôi muốn ghi nhật ký ngoại lệ cùng với dấu vết ngăn xếp. Để làm điều này, bạn có thể sử dụng
import logging
51. Chạy đoạn mã sau để thấy rằng giá trị của các biến và kết quả được ghi lại dưới dạng INFO, cho biết rằng mã hoạt động như mong đợilogging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
4Tiếp theo, đặt giá trị của y thành 0 và chạy lại mô-đun
Khi bạn kiểm tra tệp nhật ký pylog. log, bạn có thể thấy rằng một ngoại lệ đã được ghi lại cùng với dấu vết ngăn xếp
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
5Bước tiếp theo, hãy sửa đổi mã của chúng ta để có danh sách các giá trị x và y mà chúng ta muốn tính thương số x/y. Để đăng nhập một ngoại lệ, bạn cũng có thể sử dụng
import logging
52logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
7Khi chạy đoạn mã trên, bạn sẽ thấy rằng tệp nhật ký hiện chứa thông tin về các sự kiện đó khi thực thi thành công cũng như lỗi khi xảy ra ngoại lệ
Tùy chỉnh ghi nhật ký với Trình ghi nhật ký, Trình xử lý và Trình định dạng tùy chỉnh
Tiếp theo, hãy cấu trúc lại mã hiện có. Chúng ta sẽ định nghĩa một hàm riêng biệt
import logging
53logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
9Chúng ta sẽ có định nghĩa hàm trên bên trong mô-đun
import logging
54. Trong mô-đun WARNING:root:A WARNING
ERROR:root:An ERROR
CRITICAL:root:A message of CRITICAL severity
8, chúng ta sẽ chỉ có các lệnh gọi hàm. Hãy định cấu hình trình ghi nhật ký tùy chỉnh trong cả mô-đun WARNING:root:A WARNING
ERROR:root:An ERROR
CRITICAL:root:A message of CRITICAL severity
8 và import logging
54Điều này được giải thích trong đoạn mã sau
▶️ Định cấu hình trình ghi nhật ký tùy chỉnh cho mô-đun
import logging
54logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
5▶️ Định cấu hình trình ghi nhật ký tùy chỉnh cho mô-đun chính
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
0Hãy phân tích đoạn mã trên để định cấu hình bộ ghi tùy chỉnh làm gì
Bước đầu tiên, chúng tôi thiết lập trình ghi nhật ký và cấp độ ghi nhật ký.
import logging
59 trả về bộ ghi có tên đó, nếu nó tồn tại; . Trong thực tế, bạn sẽ đặt tên của bộ ghi nhật ký thành biến đặc biệt logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
41, tương ứng với tên của mô-đun. Chúng tôi gán đối tượng logger cho một biến. We then set the desired logging level using logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
42Tiếp theo, chúng tôi định cấu hình trình xử lý. Vì chúng tôi muốn ghi các sự kiện vào một tệp, chúng tôi định cấu hình một
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
43. logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
44 trả về một đối tượng xử lý tệp. Ngoài tên của tệp nhật ký, bạn có thể tùy chọn chỉ định chế độ. Trong ví dụ này, chúng tôi đặt chế độ ghi. Có các trình xử lý khác như StreamHandler, HTTPHandler, SMTPHandler, v.v.We then create a formatter object using the syntax.
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
45. Trong ví dụ này, chúng tôi đặt logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
46, tên của trình ghi nhật ký [một chuỗi], trước định dạng bản ghi nhật ký mà chúng tôi đã có trước đóTiếp theo, chúng tôi thêm trình định dạng vào trình xử lý bằng cách sử dụng
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
47. Cuối cùng, chúng tôi thêm trình xử lý vào đối tượng logger bằng cách sử dụng logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
48Sau đó, bạn có thể chạy mô-đun
WARNING:root:A WARNING
ERROR:root:An ERROR
CRITICAL:root:A message of CRITICAL severity
8 và kiểm tra các tệp nhật ký đã tạoGhi nhật ký Python. Thực hành tốt nhất
Cho đến nay, chúng tôi đã giới thiệu cách ghi nhật ký các biến, ngoại lệ và thiết lập trình ghi nhật ký tùy chỉnh. Tiếp theo, hãy liệt kê một số phương pháp hay nhất để ghi nhật ký
Đặt mức ghi nhật ký tối ưu. Nhật ký chỉ hữu ích khi bạn có thể sử dụng chúng để theo dõi các lỗi quan trọng cần được sửa. Tùy thuộc vào ứng dụng cụ thể, đảm bảo đặt mức ghi nhật ký tối ưu. Ghi nhật ký quá nhiều sự kiện có thể không tối ưu từ quan điểm gỡ lỗi vì khó lọc qua nhật ký để xác định các lỗi cần chú ý ngay lập tức
Định cấu hình logger ở cấp mô-đun. Khi bạn đang làm việc trên một ứng dụng có nhiều mô-đun, bạn nên xem xét việc định cấu hình trình ghi nhật ký cho từng mô-đun. Đặt tên của bộ ghi thành
41 giúp xác định các mô-đun trong ứng dụng của bạn có vấn đề cần khắc phụclogging.debug["A DEBUG Message"] logging.info["An INFO"] logging.warning["A WARNING"] logging.error["An ERROR"] logging.critical["A message of CRITICAL severity"]
Bao gồm dấu thời gian và đảm bảo định dạng nhất quán. Luôn bao gồm dấu thời gian trong nhật ký vì chúng hữu ích trong việc truy ngược lại thời điểm xảy ra lỗi. Định dạng nhật ký của bạn một cách nhất quán trên các mô-đun khác nhau trong ứng dụng của bạn
Xoay các tệp nhật ký để tạo điều kiện gỡ lỗi dễ dàng hơn. Khi làm việc trên các ứng dụng lớn có nhiều mô-đun, có khả năng các tệp nhật ký của bạn sẽ có kích thước rất lớn. Vì rất khó lọc qua các nhật ký lớn như vậy để phát hiện lỗi, bạn nên xem xét việc xoay các tệp nhật ký. You can do this by using the
51 with the syntax.logging.debug["A DEBUG Message"] logging.info["An INFO"] logging.warning["A WARNING"] logging.error["An ERROR"] logging.critical["A message of CRITICAL severity"]
52. Khi tệp nhật ký hiện tại đạt đến kích thướclogging.debug["A DEBUG Message"] logging.info["An INFO"] logging.warning["A WARNING"] logging.error["An ERROR"] logging.critical["A message of CRITICAL severity"]
53, các nhật ký tiếp theo sẽ chuyển sang các tệp tiếp theo tùy thuộc vào giá trị củalogging.debug["A DEBUG Message"] logging.info["An INFO"] logging.warning["A WARNING"] logging.error["An ERROR"] logging.critical["A message of CRITICAL severity"]
54. Nếu bạn đặtlogging.debug["A DEBUG Message"] logging.info["An INFO"] logging.warning["A WARNING"] logging.error["An ERROR"] logging.critical["A message of CRITICAL severity"]
54 thành K, bạn sẽ nhận được K tệp sao lưulogging.debug["A DEBUG Message"] logging.info["An INFO"] logging.warning["A WARNING"] logging.error["An ERROR"] logging.critical["A message of CRITICAL severity"]
Lợi ích và hạn chế của việc ghi nhật ký
Bây giờ chúng ta đã học được những kiến thức cơ bản về ghi nhật ký trong Python, hãy cùng tìm hiểu những lợi ích và một số nhược điểm tiềm ẩn của việc ghi nhật ký
Chúng tôi đã thấy cách sử dụng ghi nhật ký trong Python cho phép chúng tôi duy trì nhật ký cho các mô-đun khác nhau trong một ứng dụng. Chúng tôi cũng có thể định cấu hình và tùy chỉnh ghi nhật ký khi cần. Tuy nhiên, điều này không phải là không có bất lợi. Ngay cả khi bạn đặt mức ghi nhật ký thành cảnh báo hoặc bất kỳ mức nào cao hơn, tệp nhật ký của bạn có thể nhanh chóng tăng kích thước khi bạn duy trì nhật ký liên tục trên tất cả các lần chạy của ứng dụng. Do đó, việc sử dụng tệp nhật ký để gỡ lỗi trở nên khó khăn
Ngoài ra, việc kiểm tra nhật ký lỗi rất khó khăn, đặc biệt khi thông báo lỗi không cung cấp đủ ngữ cảnh. Khi bạn thực hiện
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
56 mà không đặt logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
57 thành logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
07, rất khó để kiểm tra nguyên nhân cốt lõi của sự cố nếu các thông báo không hữu ích lắmMặc dù việc ghi nhật ký chỉ cung cấp thông tin chẩn đoán về những gì cần khắc phục trong ứng dụng của bạn, nhưng một công cụ giám sát như Sentry có thể cung cấp thông tin chi tiết hơn để giúp bạn khắc phục sự cố ứng dụng của mình một cách dễ dàng và đồng thời khắc phục các sự cố về hiệu suất
Trong phần tiếp theo, chúng ta sẽ xem xét cách bạn có thể tích hợp Sentry vào ứng dụng Python của mình để đơn giản hóa quy trình gỡ lỗi
Tích hợp Sentry trong ứng dụng Python của bạn
Bạn có thể cài đặt SDK Python của Sentry bằng trình quản lý gói pip
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
1Sau khi bạn đã cài đặt SDK, bạn có thể nhập sentry_sdk và thêm các dòng mã sau để định cấu hình giám sát cho ứng dụng Python của mình
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
2Như đã thấy ở trên, bạn cần có
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
59 để thiết lập giám sát. DSN là viết tắt của Tên nguồn dữ liệu và đó là nơi SDK của Sentry sẽ gửi các sự kiện trong ứng dụng của bạn. Bạn có thể tìm khóa DSN của mình bằng cách điều hướng đến Your-Project > Settings > Client Keys [DSN]Sau khi chạy ứng dụng Python, bạn có thể truy cập Sentry. io và mở bảng điều khiển của dự án. Bạn sẽ có thể xem thông tin về số lượng lỗi đã ghi và các sự cố trong ứng dụng của bạn. Trong ví dụ này, ngoại lệ tương ứng với
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
70 đã được ghi lạiKhi kiểm tra vấn đề một cách chi tiết, bạn có thể thấy rằng Sentry cung cấp thông tin chi tiết về nơi xảy ra ngoại lệ và các đối số
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
71 và logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
72 khiến ngoại lệ xảy raĐiều hướng xuống dưới, bạn sẽ thấy rằng bạn có nhật ký tương ứng với thông tin và lỗi. Khi bạn định cấu hình giám sát với Sentry, sẽ có sự tích hợp ngầm với mô-đun ghi nhật ký. Nhớ lại rằng chúng tôi đặt mức ghi nhật ký thành thông tin. Do đó, Sentry ghi lại tất cả các sự kiện ở cấp độ thông tin trở lên dưới dạng breadcrumbs giúp dễ dàng truy tìm lỗi
Trái ngược với việc kiểm tra các tệp nhật ký lớn để tìm lỗi tiềm ẩn và thông tin khắc phục sự cố, Sentry cho phép bạn lọc các sự cố theo cấp độ, chẳng hạn như thông tin và lỗi. Điều này cho phép bạn ưu tiên các vấn đề theo mức độ nghiêm trọng của chúng và cũng tận dụng breadcrumbs để theo dõi nguồn gốc của vấn đề
Trong ứng dụng ví dụ này, chúng tôi đã xử lý
logging.debug["A DEBUG Message"]
logging.info["An INFO"]
logging.warning["A WARNING"]
logging.error["An ERROR"]
logging.critical["A message of CRITICAL severity"]
70 như một ngoại lệ. Trong các dự án lớn hơn, ngay cả khi chúng tôi không triển khai xử lý ngoại lệ như vậy, Sentry sẽ tự động cung cấp thông tin chẩn đoán về sự hiện diện của các ngoại lệ chưa được xử lý. Bạn cũng có thể theo dõi các vấn đề về hiệu suất trong mã bằng SentryBạn có thể tìm mã cho hướng dẫn này trong repo GitHub này
kết thúc
Trong hướng dẫn này, bạn đã học cách thiết lập ghi nhật ký bằng mô-đun ghi nhật ký tích hợp sẵn của Python. Bạn đã học những kiến thức cơ bản về định cấu hình trình ghi nhật ký gốc và tùy chỉnh, cùng với các phương pháp hay nhất về ghi nhật ký. Ngoài ra, bạn cũng đã thấy cách bạn có thể tận dụng Sentry để giám sát các ứng dụng Python của mình – để nhận thông tin về các vấn đề về hiệu suất và các lỗi khác – đồng thời sử dụng tất cả các tính năng của mô-đun ghi nhật ký
Khi bạn làm việc trên ứng dụng Python tiếp theo của mình, hãy đảm bảo thực hiện ghi nhật ký và đăng ký dùng thử miễn phí Sentry để gỡ lỗi liền mạch