Hướng dẫn ghi nhật ký Python. Hiểu những điều cơ bản - CrowdStrike

Mặc dù việc gửi thông báo nhật ký tới bảng điều khiển rất tốt cho việc gỡ lỗi cục bộ, nhưng trong thực tế sử dụng, bạn sẽ thường xuyên cần gửi nhật ký đến các đích khác

Chúng tôi sẽ đề cập đến các chủ đề phức tạp 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 sau trong Hướng dẫn ghi nhật ký Python của chúng tôi, nhưng bây giờ, hãy tập trung vào ba trường hợp sử dụng điển hình

  1. Đăng nhập vào một tập tin
  2. Đăng nhập vào nhật ký hệ thống
  3. Đăng nhập vào systemd-journald

Nhật ký Python được gửi đến một tệp

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 để làm cho chương trình Python của bạn tạo tệp nhật ký, chẳng hạn, để ghi tập lệnh mức CẢNH BÁO ban đầu của chúng tôi vào tệp có tên HumioDemo. log, dòng sau được thêm vào

________Đầu tiên

Tập lệnh được cập nhật phải giố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!')

Khi bạn chạy tập lệnh đó, sẽ không có gì in ra bàn điều khiển; . tệp nhật ký sẽ chứa thông báo tường trình và được đặt trong thư mục làm việc hiện tại

Gửi nhật ký Python tới nhật ký 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, đây là cách phổ biến để tập trung nhật ký cục bộ và từ xa từ các ứng dụng trên toàn hệ thống. Một mô-đun nhật ký hệ thống tiêu chuẩn cũng có sẵn giúp việc ghi vào nhật ký hệ thống trở nên đơn giản đối với các trường hợp sử dụng Python phổ biến

Tập lệnh này sử dụng mô-đun nhật ký hệ thống chung

# 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!')

Thông báo sẽ xuất hiện 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 này có thể được đặt tên 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

_16

Gửi nhật ký Python tới systemd-journald

Ưu điểm của việc sử dụng systemd-journald để ghi nhật ký bao gồm

  • lưu trữ nhị phân dẫn đến tra cứu nhanh hơn
  • Ghi nhật ký có cấu trúc bắt buộc
  • Xoay tự động dựa trên 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

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 trên hầu hết các hệ thống Linux hiện đại sử dụng systemd và bất kỳ ứng dụng Python nào của bạ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

Thư viện python-systemd và các trình bao bọc như trình bao bọc Python systemd hợp lý hóa quá trình gửi nhật ký Python tới systemd-journald ngoài các mô-đun có trong thư viện Python tiêu chuẩn

Ví dụ: sử dụng trình quản lý gói của hệ thống để cài đặt python-systemd trước khi thêm dòng sau vào mã của bạn để sử dụng nó

from systemd import journal

Đây là một tập lệnh Python đơn giản xuất ra một thông báo ghi nhật ký ở mức CẢNH BÁO

_19

Sau khi thực thi đoạn script được đề cập ở 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à quan sát kết quả tương tự như

logging.basicConfig(filename='HumioDemo.log')
1

Nguyên tắc tạo nhật ký Python

Giờ đây, bạn có thể triển khai ghi nhật ký cơ bản nhất cho các ứng dụng Python của mình, nhưng vẫn còn nhiều điều cần tìm hiểu về mô-đun ghi nhật ký tích hợp. PEP 282, chính thức, và là nguồn tuyệt vời để tìm hiểu thêm

Cân nhắc các phương pháp hay nhất sau đây khi bạn thăng tiến

Bao gồm dấu thời gian với tin nhắn của bạn

Bạn phải luôn bao gồm dấu thời gian với mọi thư bạn gửi vì khi nào là thành phần quan trọng của một sự kiện. Bạn có thể tùy chỉnh thêm bằng cách sử dụng mô-đun ghi nhật ký mặc định bằng cách 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

sở hữu một thiết bị để quay các bản ghi

Có chiến lược xoay vòng nhật ký nếu bạn lưu trữ nhật ký trên đĩa để ngăn các sự cố về dung lượng ổ đĩa. Với mô-đun ghi nhật ký Python tích hợp, hãy nghĩ đến việc sử dụng

Không khởi tạo trực tiếp các mô-đun ghi nhật ký

Sử dụng ghi nhật ký để tạo các mô-đun ghi nhật ký thay vì khởi tạo trực tiếp chúng. getLogger(name)Nếu bạn đặt tên cho logger theo các mô-đun thích hợp, hệ thống phân cấp đặt tên mô-đun mặc định và hệ thống phân cấp gói Python giống hệt nhau

Tập trung nhật ký của bạn

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;

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

  1. Đăng nhập vào một tập tin
  2. Đăng nhập vào nhật ký hệ thống
  3. Đă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

________số 8

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

# 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!')
5

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 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

from systemd import journal

Đâ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 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!')
8

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ư

# 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!')
0

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

Ghi nhật ký Python hoạt động như thế nào?

Python có ghi nhật ký mô-đun tích hợp cho phép ghi thông báo trạng thái vào một tệp hoặc bất kỳ luồng đầu ra nào khác . Tệp có thể chứa thông tin về phần nào của mã được thực thi và vấn đề nào đã phát sinh.

Ghi nhật ký getLogger (__ Tên __) để làm gì?

getLogger(name) thường được thực thi. Hàm getLogger() chấp nhận một đối số duy nhất - tên của trình ghi nhật ký. Nó trả về một tham chiếu đến phiên bản trình ghi với tên được chỉ định nếu được cung cấp hoặc gốc nếu không . Nhiều lệnh gọi getLogger() có cùng tên sẽ trả về một tham chiếu đến cùng một đối tượng logger.

Làm cách nào để bạn đăng nhập đầu ra bằng Python?

Đây là một ví dụ. .
nhập nhật ký ghi nhật ký. basicConfig(level=log. .
GỠ LỖI. nguồn gốc. Điều này sẽ được đăng nhập
nhập nhật ký ghi nhật ký. basicConfig(filename='app. log', filemode='w', format='%(name)s - %(levelname)s - %(message)s') ghi nhật ký. .
root - LỖI - Điều này sẽ được ghi vào một tập tin
LỖI. nguồn gốc. Đây là một thông báo lỗi

Làm cách nào để tạo nhiều cấp độ ghi nhật ký trong Python?

Bạn có thể đặt cấp độ ghi nhật ký khác nhau cho mỗi trình xử lý ghi nhật ký nhưng có vẻ như bạn sẽ phải đặt cấp độ của trình ghi nhật ký thành "thấp nhất" . Trong ví dụ bên dưới, tôi đặt trình ghi nhật ký thành DEBUG, trình xử lý luồng thành INFO và TimedRotatingFileHandler thành DEBUG. Vì vậy, tệp có các mục GỠ LỖI và luồng chỉ xuất ra THÔNG TIN.