Cho đến nay, chúng tôi đã gửi các thông điệp nhật ký của mình tới bảng điều khiển. Điều đó rất tốt cho việc gỡ lỗi cục bộ, nhưng trong thực tế, bạn sẽ thường cần gửi nhật ký đến các đích khác
Sau này trong Hướng dẫn ghi nhật ký Python của chúng tôi, chúng tôi sẽ đề cập đến các chủ đề nâng cao hơn như ghi nhật ký tập trung và
# Import the default logging module import logging # Format the log message logging.basicConfig[level=logging.INFO] # Emit a warning message logging.info['Keep going, you are doing great!']2 cho Django. Hiện tại, chúng tôi sẽ tập trung vào ba trường hợp sử dụng phổ biến
- Đăng nhập vào một tập tin
- Đăng nhập vào nhật ký hệ thống
- Đăng nhập vào systemd-journald
Gửi nhật ký Python tới một tệp
Nếu muốn ứng dụng Python của mình tạo tệp nhật ký, bạn có thể sử dụng mô-đun ghi nhật ký mặc định và chỉ định tên tệp trong mã của mình. Ví dụ: để làm cho tập lệnh mức CẢNH BÁO ban đầu của chúng tôi ghi vào một tệp có tên HumioDemo. log, chúng tôi thêm dòng sau
logging.basicConfig[filename='HumioDemo.log']
Kịch bản mới sẽ trông như thế này
# Import the default logging module import logging # Set basicConfig[] to create a log file logging.basicConfig[filename='HumioDemo.log'] # Emit a warning message logging.warning['You are learning Python logging!']
Sẽ không có gì in ra bàn điều khiển khi bạn chạy tập lệnh đó. Thay vào đó, nó sẽ tạo một HumioDemo. tệp nhật ký trong thư mục làm việc hiện tại và tệp này sẽ bao gồm thông báo tường trình
Gửi nhật ký Python tới nhật ký hệ thống
Syslog là một cơ chế phổ biến để tập trung các bản ghi cục bộ và từ xa từ các ứng dụng trên toàn hệ thống. Mô-đun ghi nhật ký Python mặc định bao gồm một để gửi nhật ký đến máy chủ nhật ký hệ thống cục bộ hoặc từ xa. Ngoài ra còn có một mô-đun nhật ký hệ thống tiêu chuẩn giúp dễ dàng ghi vào nhật ký hệ thống cho các trường hợp sử dụng Python cơ bản
Đây là tập lệnh sử dụng mô-đun nhật ký hệ thống tiêu chuẩn
# Import the standard syslog module import syslog # Emit an INFO-level message syslog.syslog[syslog.LOG_INFO,'Logging an INFO message with the syslog module!'] # Emit a WARNING-level message syslog.syslog[syslog.LOG_WARNING,'Logging a WARNING message with the syslog module!']
Sau khi chạy tập lệnh đó, bạn sẽ thấy các thông báo trong tệp nhật ký hệ thống cục bộ của hệ thống. Tùy thuộc vào hệ thống của bạn, tệp đó có thể là
# Import the default logging module import logging # Format the log message logging.basicConfig[level=logging.INFO] # Emit a warning message logging.info['Keep going, you are doing great!']3 hoặc
# Import the default logging module import logging # Format the log message logging.basicConfig[level=logging.INFO] # Emit a warning message logging.info['Keep going, you are doing great!']4. Thông điệp tường trình sẽ trông giống như sau
Nov 11 11:11:16 localhost syslog.py: Logging an INFO message with the syslog module! Nov 11 11:11:16 localhost syslog.py: Logging a WARNING message with the syslog module!
Gửi nhật ký Python tới systemd-journald
Ghi nhật ký bằng systemd-journald có một số lợi ích, bao gồm
- Tra cứu nhanh hơn nhờ lưu trữ nhị phân
- Ghi nhật ký có cấu trúc bắt buộc
- Xoay vòng nhật ký tự động dựa trên các giá trị
# Import the default logging module import logging # Format the log message logging.basicConfig[level=logging.INFO] # Emit a warning message logging.info['Keep going, you are doing great!']
5
Trên hầu hết các hệ thống Linux hiện đại sử dụng systemd, nếu ứng dụng Python của bạn chạy dưới dạng một đơn vị systemd, bất cứ thứ gì nó in ra thiết bị xuất chuẩn hoặc thiết bị xuất chuẩn sẽ ghi vào systemd-journald. Điều đó có nghĩa là tất cả những gì bạn cần làm là gửi đầu ra nhật ký của mình tới thiết bị xuất chuẩn hoặc thiết bị xuất chuẩn
Ngoài các mô-đun có trong thư viện Python tiêu chuẩn, thư viện python-systemd và các trình bao bọc như trình bao bọc Python systemd giúp hợp lý hóa quá trình gửi nhật ký Python tới systemd-journald
Ví dụ: để sử dụng python-systemd, trước tiên hãy cài đặt nó bằng trình quản lý gói của hệ thống của bạn. Sau đó thêm dòng sau vào mã của bạn
________số 8_______Đây là một tập lệnh Python đơn giản viết thông báo ở mức CẢNH BÁO tới tạp chí
import logging from systemd import journal logger = logging.getLogger['humioDemoLogger'] logger.addHandler[journal.JournalHandler[]] logger.warning["logging is easy!"]
Sau khi chạy đoạn script trên, chúng tôi chạy
# Import the default logging module import logging # Format the log message logging.basicConfig[level=logging.INFO] # Emit a warning message logging.info['Keep going, you are doing great!']6 và thấy đầu ra tương tự như
Nov 11 11:11:57 localhost pylog.py[2111]: logging is easy!
Các phương pháp hay nhất để phát nhật ký Python
Tại thời điểm này, bạn sẽ có thể triển khai ghi nhật ký cơ bản cho các ứng dụng Python của mình. Tuy nhiên, còn nhiều điều nữa để tìm hiểu về mô-đun ghi nhật ký tiêu chuẩn. Đọc PEP 282, bản chính thức và là những cách tuyệt vời để tìm hiểu sâu hơn
Khi bạn tiến bộ, hãy ghi nhớ các phương pháp hay nhất sau đây
Bao gồm dấu thời gian với tin nhắn của bạn
Khi nào là một phần quan trọng của một sự kiện. Do đó, bạn nên bao gồm dấu thời gian với mọi thông báo bạn phát ra. Với mô-đun ghi nhật ký mặc định, bạn có thể thêm dấu thời gian vào trình định dạng của mình, như chúng tôi đã làm với %[asctime]s trong ví dụ trước của chúng tôi. Bạn có thể tùy chỉnh thêm bằng cách sử dụng
Có cơ chế xoay nhật ký
Nếu bạn lưu trữ nhật ký trên đĩa, hãy có chiến lược xoay vòng nhật ký để tránh các sự cố về dung lượng ổ đĩa. Với mô-đun ghi nhật ký mặc định của Python, hãy cân nhắc sử dụng
Không khởi tạo trực tiếp các mô-đun ghi nhật ký
Thay vì khởi tạo trực tiếp các mô-đun ghi nhật ký, hãy sử dụng ghi nhật ký. getLogger[tên]. Hệ thống phân cấp đặt tên mô-đun mặc định tương tự như hệ thống phân cấp gói của Python và hoàn toàn giống nhau nếu bạn đặt tên cho các trình ghi theo các mô-đun tương ứng của chúng,
Tập trung nhật ký của bạn
Nhiều tệp nhật ký nằm rải rác trên nhiều hệ thống có thể trở nên khó sử dụng như những câu lệnh print[] ban đầu chúng tôi muốn loại bỏ. Tập trung nhật ký của bạn để phân tích cú pháp và phân tích mang lại cho bạn khả năng quan sát trên quy mô lớn