Bằng cách đọc bài viết này, bạn sẽ học cách triển khai hệ thống ghi nhật ký theo thời gian của riêng mình để xuất tệp nhật ký hàng ngày cho máy chủ Flask hoặc Django của bạn
Có một hệ thống ghi nhật ký thực sự có lợi cho việc gỡ lỗi. Bạn chắc chắn muốn tạo các tệp nhật ký hàng ngày để theo dõi các lỗi, cũng như để thu thập dữ liệu, chẳng hạn như việc sử dụng và các API thường được gọi
Chúng tôi sẽ sử dụng mô-đun tích hợp có tên là ghi nhật ký, đây là một mô-đun mạnh mẽ. Một trong những ưu điểm chính của mô-đun này là nó là mô-đun thư viện chuẩn, có nghĩa là tất cả các mô-đun Python đều có thể tham gia ghi nhật ký
Có ba phần trong hướng dẫn này
- sử dụng cơ bản
- thành phần nâng cao
- Phần kết luận
Bắt đầu nào
1. Sử dụng cơ bản
Nhập khẩu
Bạn cần nhập mô-đun trước khi có thể sử dụng nó. Thêm câu lệnh nhập sau
import logging
Tiếp theo, bạn có thể ghi nhật ký các tin nhắn bằng cách sử dụng các chức năng có sẵn dựa trên mức độ nghiêm trọng
cấp độ ghi nhật ký
Có tất cả năm cấp độ được cung cấp
logging.debug['Debug']
2 — Thông tin chi tiết, thường chỉ được quan tâm khi chẩn đoán sự cố
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
3 — Xác nhận rằng mọi thứ đang hoạt động như mong đợi
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
4 — Dấu hiệu cho thấy điều gì đó bất ngờ đã xảy ra hoặc dấu hiệu của một số vấn đề trong tương lai gần [e. g. "Dung lượng ổ đĩa thấp"]. Phần mềm vẫn hoạt động bình thường
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
5 — Do sự cố nghiêm trọng hơn, phần mềm không thể thực hiện một số chức năng
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
6 — Một lỗi nghiêm trọng, chỉ ra rằng bản thân chương trình có thể không tiếp tục chạy được
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
Bạn có thể gọi chúng như sau
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
Hãy kiểm tra nó bằng cách thiết lập một máy chủ Flask đơn giản và chạy các thông điệp tường trình
Lưu mã ở trên vào tệp có tên
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
7. Mở một thiết bị đầu cuối và trỏ nó vào thư mục và chạy nó thông qua lệnh sau________số 8Mở trình duyệt và nhập
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
8, bạn sẽ có thể thấy phản hồi của logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
9 và đầu ra sau trong bảng điều khiểnBạn sẽ nhận thấy rằng
python log_test.py
0 không được ghi lại. Điều này chủ yếu là do cấp độ ghi nhật ký đã được mặc định là cảnh báo trở lên. Thông báo gỡ lỗi và thông tin sẽ không được ghi lạiChúng ta có thể dễ dàng thay đổi mức ghi nhật ký thông qua chức năng
python log_test.py
1 trong quá trình khởi tạo. Hãy kiểm tra nó bằng cách thêm đoạn mã sau ngay trên trang trí python log_test.py
2 và bên dưới python log_test.py
3logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
5Bạn sẽ có thể thấy đầu ra sau
Hình ảnh của tác giả
Khởi tạo thông qua basicConfig
Hàm
python log_test.py
1 cũng chấp nhận tham số tên tệp cho biết rằng nó nên sử dụng python log_test.py
5 để ghi tệp vào tệp thay vì bảng điều khiểnTạo một thư mục mới có tên là
python log_test.py
6 và sửa đổi mã python log_test.py
1 thành như saulogging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
0Một tệp có tên
python log_test.py
8 sẽ được tạo khi bạn truy cập logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
8 trong trình duyệt webHình ảnh của tác giả
Hệ thống ghi nhật ký sẽ nối các thông báo nhật ký vào tệp cho lệnh gọi tiếp theo tới URL
dữ liệu biến
Bạn có thể sử dụng chuỗi định dạng để ghi dữ liệu biến. Ví dụ như sau
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
3Định dạng
Bạn có thể chỉ định định dạng của đầu ra dựa trên sở thích của mình. Ví dụ sau sẽ ghi lại thời gian, mức độ nghiêm trọng của thông báo và cuối cùng là thông báo đầu ra
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
4Bạn sẽ nhận được đầu ra sau
Hình ảnh của tác giả
Trong phần tiếp theo, chúng ta sẽ khám phá hai thành phần chính khác của mô-đun ghi nhật ký
2. Thành phần nâng cao
Các chức năng trong phần trước là một phần của thành phần trình ghi nhật ký có sẵn để hiển thị giao diện mà mã ứng dụng trực tiếp sử dụng. Ngoài thành phần logger, còn có hai thành phần chính khác
logging.debug['Debug']
50— Gửi bản ghi nhật ký [do người ghi nhật ký tạo] đến đích thích hợp
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
51 — Chỉ định bố cục của các bản ghi nhật ký trong đầu ra cuối cùng
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
Hai thành phần này là một phần của cấu hình cho thành phần
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
52Bạn có thể sử dụng cả hai thành phần để triển khai hệ thống ghi nhật ký nâng cao, chẳng hạn như luân phiên giữa các tệp khác nhau tùy thuộc vào dung lượng kích thước tệp hoặc ngày trong ngày
Hãy kiểm tra nó bằng cách sao chép chức năng tương tự, nhưng lần này, với cả hai thành phần
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
53 và logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
54trình định dạng
Mặt khác, trình định dạng lấy một chuỗi kiểu đơn giản xác định định dạng của thư
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
0xử lý
Những cái mà chúng tôi đã thử nghiệm cho đến nay là
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
55 và python log_test.py
5. Ngoài trình xử lý mặc định, mô-đun còn đi kèm với các trình xử lý sau- Phiên bản
logging.debug['Debug']
57 gửi tin nhắn đến luồng [đối tượng giống như tệp]
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical'] - Phiên bản
logging.debug['Debug']
58 gửi tin nhắn đến tệp đĩa
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical'] logging.debug['Debug']
59 là lớp cơ sở dành cho trình xử lý xoay tệp nhật ký tại một điểm nhất định. Nó không có nghĩa là được khởi tạo trực tiếp. Thay vào đó, hãy sử dụng
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
00 hoặc
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
01
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']- Phiên bản
logging.debug['Debug']
02 gửi tin nhắn đến tệp đĩa, với sự hỗ trợ cho kích thước tệp nhật ký tối đa và xoay vòng tệp nhật ký
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical'] - Phiên bản
logging.debug['Debug']
03 gửi tin nhắn đến tệp đĩa, xoay tệp nhật ký theo các khoảng thời gian nhất định
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical'] - Phiên bản
logging.debug['Debug']
04 gửi tin nhắn đến ổ cắm TCP/IP. kể từ 3. 4, Ổ cắm tên miền Unix cũng được hỗ trợ
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical'] - Phiên bản
logging.debug['Debug']
05 gửi tin nhắn đến ổ cắm UDP. kể từ 3. 4, Ổ cắm tên miền Unix cũng được hỗ trợ
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical'] - Phiên bản
logging.debug['Debug']
06 gửi tin nhắn đến một địa chỉ email được chỉ định
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical'] - Các phiên bản
logging.debug['Debug']
07 gửi tin nhắn đến một trình nền nhật ký hệ thống Unix, có thể trên một máy từ xa
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical'] - Phiên bản
logging.debug['Debug']
08 gửi thông báo tới nhật ký sự kiện Windows NT/2000/XP
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical'] - Phiên bản
logging.debug['Debug']
09 gửi tin nhắn đến bộ đệm trong bộ nhớ, bộ đệm này sẽ bị xóa bất cứ khi nào tiêu chí cụ thể được đáp ứng
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical'] - Phiên bản
logging.debug['Debug']
30 gửi tin nhắn đến máy chủ HTTP sử dụng ngữ nghĩa
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
31 hoặc
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
32
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical'] - Các trường hợp
logging.debug['Debug']
33 xem tệp mà chúng đang đăng nhập. Nếu tệp thay đổi, tệp sẽ được đóng và mở lại bằng tên tệp. Trình xử lý này chỉ hữu ích trên các hệ thống giống Unix;
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical'] - Phiên bản
logging.debug['Debug']
34 gửi tin nhắn đến hàng đợi, chẳng hạn như những tin nhắn được triển khai trong hàng đợi hoặc mô-đun đa xử lý
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical'] - Phiên bản
logging.debug['Debug']
35 không làm gì với thông báo lỗi. Chúng được sử dụng bởi các nhà phát triển thư viện, những người muốn sử dụng ghi nhật ký, nhưng muốn tránh thông báo
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
36 có thể được hiển thị nếu người dùng thư viện chưa định cấu hình ghi nhật ký
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
Khi bạn đã khởi tạo nó, bạn có thể sử dụng bộ định dạng cho trình xử lý
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
3Tiều phu
Trình ghi nhật ký cho phép chúng tôi đặt mức ghi nhật ký cũng như thêm hoặc xóa trình xử lý. Ví dụ sau đặt mức ghi nhật ký thành
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
3 và trình xử lý thành python log_test.py
5 mà chúng tôi đã xác định trước đólogging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
6Đối với cuộc gọi nhật ký tiếp theo, bạn phải sử dụng
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
39 thay vì logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
40Chúng ta hãy xem mã hoàn chỉnh sau đây để tham khảo
Mặc dù mã hoàn chỉnh cho cùng một triển khai dài dòng hơn nhiều so với phần trước thông qua lệnh gọi
python log_test.py
1, nhưng lợi ích của việc có cấu trúc như vậy cho phép chúng tôi dễ dàng triển khai hệ thống ghi nhật ký mong muốn của mìnhHãy cùng xem ví dụ sau sử dụng
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
01 để ghi nhật ký các tệp hàng ngàyTimedRotatingFileHandler
Chúng tôi sẽ nhập mô-đun ở trên cùng để nhắc nhở rằng ứng dụng Flask này sử dụng
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
01logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
0Trong quá trình khởi tạo, bạn có thể xác định các tham số
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
44. Chuỗi đầu vào không phân biệt chữ hoa chữ thườnglogging.debug['Debug']
45 — Giây
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
46 — Phút
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
47 — Giờ
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
48 — Ngày
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
49 — Ngày trong tuần [0=Thứ Hai]
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']logging.debug['Debug']
00 — Lật xe lúc nửa đêm
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
Ví dụ sau sẽ ghi nhật ký vào một tệp mới khi năm giây trôi qua. Tệp sẽ chỉ được tạo nếu có sự kiện nhật ký
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
1logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
01 sẽ được sử dụng làm tài liệu tham khảo khi tạo tệp mới. Nó sẽ luôn lưu trữ dữ liệu nhật ký trong python log_test.py
8. Khi điều kiện được đáp ứng, tệp hiện tại sẽ được đổi tên dựa trên hậu tốBạn sẽ nhận được kết quả sau khi gửi thư rác
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
8Hình ảnh của tác giả
Mã sau đây là mã hoàn chỉnh để tạo tệp nhật ký hàng ngày. Chỉ cần đặt các tham số thành
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
00 với khoảng thời gian là logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
05Nếu bạn đang ghi unicode hoặc một dạng mã hóa khác, vui lòng đặt nó trong quá trình khởi tạo. Tham số
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
06 chấp nhận đầu vào chuỗi chẳng hạn như logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
073. Phần kết luận
Hãy tóm tắt những gì chúng ta đã học ngày hôm nay
Chúng tôi bắt đầu bằng cách khám phá chức năng cơ bản của mô-đun ghi nhật ký. Chúng tôi đã học cách xuất dữ liệu nhật ký thành tệp thông qua hàm
python log_test.py
1Sau đó, chúng tôi chuyển sang hai trong số các thành phần chính, đó là
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
54 và logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
53. Chúng tôi đã triển khai chức năng tương tự với chúng và hiển thị chúng với các trình xử lý khác có sẵn trong mô-đunBên cạnh đó, chúng tôi cũng đã thử nghiệm
logging.debug['Debug']
logging.info['Info']
logging.warning['Warning']
logging.error['Error']
logging.critical['Critical']
01 cho hệ thống nhật ký hàng ngày. Vui lòng tự mình kiểm tra các trình xử lý khác