Ví dụ về trình xử lý ghi nhật ký Python
Bài viết này trình bày những kiến thức cơ bản về cách sử dụng mô-đun ghi nhật ký tiêu chuẩn đi kèm với tất cả các bản phân phối Python. Sau khi đọc phần này, bạn sẽ có thể dễ dàng tích hợp đăng nhập vào ứng dụng Python của mình Show
Mô-đun ghi nhật ký thư viện tiêu chuẩnPython đi kèm với một mô-đun ghi nhật ký trong thư viện chuẩn có thể cung cấp một khung linh hoạt để gửi thông báo nhật ký từ các chương trình Python. Mô-đun này được các thư viện sử dụng rộng rãi và thường là điểm truy cập đầu tiên đối với hầu hết các nhà phát triển khi ghi nhật ký Mô-đun này cung cấp một cách để các ứng dụng định cấu hình các trình xử lý nhật ký khác nhau và cách định tuyến các thông báo nhật ký tới các trình xử lý này. Điều này có thể cho phép cấu hình rất linh hoạt để quản lý nhiều trường hợp sử dụng khác nhau Để phát ra một thông báo nhật ký, trước tiên người gọi yêu cầu một bộ ghi nhật ký có tên. Ứng dụng có thể sử dụng tên để định cấu hình các quy tắc khác nhau cho các bộ ghi khác nhau. Trình ghi nhật ký này sau đó có thể được sử dụng để phát ra các thông báo có định dạng đơn giản ở các cấp độ nhật ký khác nhau (DEBUG, INFO, ERROR, v.v. ), có thể được ứng dụng sử dụng để xử lý các thông báo có mức độ ưu tiên cao hơn so với các thông báo có mức độ ưu tiên thấp hơn. Mặc dù nghe có vẻ phức tạp, nhưng nó có thể đơn giản như thế này
Trong nội bộ, thông báo được chuyển thành đối tượng LogRecord và được định tuyến đến đối tượng Trình xử lý đã đăng ký cho trình ghi nhật ký này. Trình xử lý sau đó sẽ sử dụng Trình định dạng để biến LogRecord thành một chuỗi và phát ra chuỗi đó Trong các phần sau, chúng ta sẽ xem xét các ví dụ triển khai và các phương pháp hay nhất để sử dụng mô-đun này Cấp độ ghi nhật kýKhông phải tất cả các thông điệp bản ghi đều được tạo như nhau. Các mức ghi nhật ký được liệt kê trong tài liệu Python; . Khi bạn đặt cấp độ ghi nhật ký trong Python bằng mô-đun tiêu chuẩn, bạn đang nói với thư viện rằng bạn muốn xử lý tất cả các sự kiện từ cấp độ đó trở lên. Đặt mức nhật ký thành THÔNG TIN sẽ bao gồm các thông báo THÔNG TIN, CẢNH BÁO, LỖI và QUAN TRỌNG. Thông báo NOTSET và DEBUG sẽ không được đưa vào đây Ghi nhật ký từ các Mô-đunMột ứng dụng Python được tổ chức tốt có khả năng bao gồm nhiều mô-đun. Đôi khi các mô-đun này được sử dụng bởi các chương trình khác. Tuy nhiên, trừ khi bạn đang cố ý phát triển các mô-đun có thể tái sử dụng bên trong ứng dụng của mình, bạn có thể đang sử dụng các mô-đun có sẵn từ PyPI và các mô-đun mà bạn tự viết riêng cho ứng dụng của mình Nói chung, một mô-đun nên phát ra các thông báo bản ghi như một phương pháp hay nhất và không nên định cấu hình cách các thông báo đó được xử lý. Đó là trách nhiệm của ứng dụng Các mô-đun có trách nhiệm duy nhất là giúp ứng dụng dễ dàng định tuyến các thông điệp tường trình của chúng. Vì lý do này, theo quy ước, mỗi mô-đun chỉ cần sử dụng một bộ ghi có tên giống như chính mô-đun đó. Điều này giúp ứng dụng dễ dàng định tuyến các mô-đun khác nhau theo cách khác nhau, đồng thời giữ cho mã nhật ký trong mô-đun đơn giản. Mô-đun cần hai dòng để thiết lập ghi nhật ký, sau đó sử dụng trình ghi nhật ký có tên
Đó là tất cả để có nó. Trong Python, Định cấu hình ghi nhật kýỨng dụng chính của bạn nên định cấu hình hệ thống con ghi nhật ký để các thông báo nhật ký đi đúng nơi chúng cần. Mô-đun ghi nhật ký Python cung cấp nhiều cách để tinh chỉnh điều này, nhưng đối với hầu hết tất cả các ứng dụng, cấu hình có thể đơn giản Một cấu hình thường bao gồm việc thêm một Các ứng dụng nên định cấu hình ghi nhật ký càng sớm càng tốt, tốt nhất là điều đầu tiên trong ứng dụng, để các thông báo đã ghi không bị mất trong khi khởi động Cuối cùng, các ứng dụng nên bọc một khối thử/ngoại trừ xung quanh mã ứng dụng chính để gửi bất kỳ ngoại lệ nào thông qua giao diện ghi nhật ký thay vì chỉ tới thiết bị lỗi chuẩn. Đây được gọi là trình xử lý thử bắt toàn cầu. Đó không phải là nơi bạn xử lý tất cả việc ghi nhật ký ngoại lệ của mình và bạn nên tiếp tục lập kế hoạch cho các ngoại lệ trong các khối thử bắt tại các điểm cần thiết trong mã của mình theo quy tắc ngón tay cái Đối với các công thức ghi nhật ký Python cụ thể, Sách hướng dẫn ghi nhật ký Python là một tài liệu tham khảo tuyệt vời, nhưng nó có thể hơi khó đối với người mới bắt đầu. Trong các phần sau, chúng ta sẽ xem xét một số cấu hình ví dụ để giúp bạn bắt đầu sử dụng mô-đun ghi nhật ký Ví dụ 1 – Ghi vào đầu ra tiêu chuẩn cho SystemdNgày nay, đây có thể là tùy chọn đơn giản nhất và tốt nhất để định cấu hình ghi nhật ký trong những ngày này. Khi sử dụng systemd để chạy daemon, các ứng dụng chỉ có thể gửi thông báo tường trình tới thiết bị xuất chuẩn hoặc thiết bị xuất chuẩn và yêu cầu hệ thống chuyển tiếp thông báo tới tạp chí và nhật ký hệ thống. Là một lợi ích bổ sung, điều này không yêu cầu bắt ngoại lệ, vì Python đã ghi chúng vào lỗi tiêu chuẩn. Điều đó nói rằng, hãy làm theo các quy ước thích hợp và xử lý các ngoại lệ của bạn Trong trường hợp chạy Python trong các vùng chứa như Docker, ghi nhật ký vào đầu ra tiêu chuẩn thường là cách dễ dàng nhất vì đầu ra này có thể được quản lý trực tiếp và dễ dàng bởi chính vùng chứa
Đó là nó. Bây giờ, ứng dụng sẽ ghi tất cả các tin nhắn có mức INFO trở lên vào thiết bị lỗi chuẩn, sử dụng một định dạng đơn giản
Ứng dụng thậm chí có thể được định cấu hình để bao gồm các thông báo GỠ LỖI hoặc có thể chỉ LỖI bằng cách đặt biến môi trường LOGLEVEL Tuy nhiên, một vấn đề tiềm ẩn với giải pháp này là các ngoại lệ được ghi dưới dạng nhiều dòng, điều này có thể gây ra sự cố cho phân tích sau này. Đáng buồn thay, thường không hoàn toàn đơn giản, nhưng chắc chắn là có thể. Lưu ý cách thực hiện ở đây bên dưới, gọi
Ví dụ 2 – Nhật ký hệ thốngCách khác là gửi trực tiếp tới syslog. Điều này rất tốt cho các hệ điều hành cũ không có systemd. Trong một thế giới lý tưởng, điều này sẽ đơn giản, nhưng thật đáng buồn,. Đây là một thực hiện mẫu
Ví dụ 3 – Tệp nhật kýMột tùy chọn khác là ghi các tin nhắn trực tiếp vào một tệp. Điều này hiếm khi hữu ích vào những ngày này, vì quản trị viên có thể định cấu hình nhật ký hệ thống để ghi một số thông báo nhất định vào các tệp cụ thể – hoặc nếu triển khai bên trong các vùng chứa, thì đây là một phản mẫu. Ngoài ra, nếu bạn sử dụng ghi nhật ký tập trung, thì việc xử lý các tệp nhật ký bổ sung là một mối quan tâm bổ sung. Nhưng đó là một tùy chọn vẫn có sẵn Khi đăng nhập vào tệp, một trong những điều chính cần lưu ý là các tệp nhật ký cần được luân chuyển thường xuyên. Ứng dụng cần phát hiện file log bị đổi tên và xử lý tình huống đó. Mặc dù Python cung cấp trình xử lý xoay vòng tệp của riêng nó, nhưng thông thường, cách tốt nhất là để xoay vòng nhật ký cho các công cụ chuyên dụng như logrotate. WatchedFileHandler sẽ theo dõi tệp nhật ký và mở lại nếu nó được xoay, làm cho nó hoạt động tốt với logrotate mà không yêu cầu bất kỳ tín hiệu cụ thể nào Đây là một triển khai mẫu
Ví dụ 4 – Điểm cuối HTTPBạn cũng có thể sử dụng mô-đun ghi nhật ký mặc định của Python để gửi thông báo tường trình tới điểm cuối HTTP. HTTPHandler có thể hữu ích khi bạn đang chạy trong PaaS và không có quyền truy cập máy chủ trực tiếp để thiết lập nhật ký hệ thống hoặc nằm sau tường lửa chặn nhật ký hệ thống bên ngoài và có thể được sử dụng để đăng nhập trực tiếp vào các hệ thống ghi nhật ký tập trung như SolarWinds® Loggly® Đây là một tập lệnh Python đơn giản sử dụng HTTPHandler để gửi thông báo cảnh báo tới điểm cuối HTTP Loggly
Thông báo nhật ký trong Loggly được tạo bởi HTTPHandler trong Python Điểm đến khácCó thể sử dụng các đích đăng nhập khác và một số khung nhất định sử dụng điều này (e. g. , Django có thể gửi một số thông điệp tường trình dưới dạng email). Nhiều trình xử lý nhật ký phức tạp hơn trong thư viện ghi nhật ký có thể dễ dàng chặn ứng dụng, gây ra sự cố ngừng hoạt động chỉ vì cơ sở hạ tầng ghi nhật ký không phản hồi. Vì những lý do này, cách tốt nhất là giữ cho cấu hình ghi nhật ký của một ứng dụng càng đơn giản càng tốt Xu hướng ngày càng tăng trong việc ghi nhật ký là tách nó càng nhiều càng tốt khỏi chức năng cốt lõi của ứng dụng của bạn. Bằng cách đó, bạn có thể có các hành vi khác nhau trong các môi trường hoặc bối cảnh triển khai khác nhau. Sử dụng HTTPHandler với một hệ thống như Loggly là một cách đơn giản để bạn có thể dễ dàng đạt được điều này trực tiếp trong ứng dụng của mình Khi triển khai lên vùng chứa, hãy cố gắng giữ mọi thứ đơn giản nhất có thể. Đăng xuất/lỗi tiêu chuẩn và dựa vào máy chủ vùng chứa hoặc nền tảng điều phối của bạn để xử lý việc tìm ra những việc cần làm với nhật ký. Bạn vẫn có thể sử dụng các dịch vụ tập trung nhật ký, nhưng với cách tiếp cận sidecar hoặc log shipper Nếu mong muốn một cấu hình chi tiết, mô-đun ghi nhật ký cũng cung cấp khả năng tải cấu hình ghi nhật ký từ tệp cấu hình. Điều này có thể khá mạnh mẽ nhưng hiếm khi cần thiết. Khi tải cấu hình ghi nhật ký từ một tệp, hãy chỉ định Bản tóm tắtViệc ghi nhật ký trong Python thường đơn giản và được chuẩn hóa tốt nhờ khung ghi nhật ký mạnh mẽ ngay trong thư viện chuẩn Nhiều lần các mô-đun chỉ cần ghi mọi thứ vào một phiên bản trình ghi nhật ký cho tên mô-đun của chúng. Điều này có thể giúp ứng dụng dễ dàng định tuyến thông điệp tường trình của các mô-đun khác nhau đến những nơi khác nhau, nếu cần Sau đó, các ứng dụng có một số tùy chọn để định cấu hình ghi nhật ký. Tuy nhiên, trong một cơ sở hạ tầng hiện đại, việc tuân theo các phương pháp hay nhất sẽ giúp đơn giản hóa việc này rất nhiều. Trừ khi cần đặc biệt, chỉ cần đăng nhập vào Trình xử lý trong ghi nhật ký Python là gì?Trình xử lý ghi nhật ký Python
. Hiển thị nó trong bảng điều khiển (thông qua StreamHandler), trong tệp (thông qua FileHandler) hoặc thậm chí bằng cách gửi email cho bạn qua SMTPHandler, v.v. Mỗi trình xử lý nhật ký có 2 trường quan trọng. Một trình định dạng thêm thông tin ngữ cảnh vào nhật ký. the component that effectively writes/displays a log: Display it in the console (via StreamHandler), in a file (via FileHandler), or even by sending you an email via SMTPHandler, etc. Each log handler has 2 important fields: A formatter which adds context information to a log.
Làm cách nào để thêm trình xử lý vào trình ghi Python?Bảng điều khiển StreamHandler(). setLevel(đăng nhập. THÔNG TIN) # đặt định dạng đơn giản hơn cho bảng điều khiển sử dụng formatter = logging. Trình định dạng('%(name)-12s. %(levelname)-8s %(message)s') # yêu cầu trình xử lý sử dụng định dạng này console. setFormatter(formatter) # thêm trình xử lý vào nhật ký logger gốc.
Trình xử lý trong logger là gì?Đối tượng Trình xử lý lấy thông báo nhật ký từ Trình ghi nhật ký và xuất chúng . Ví dụ, nó có thể ghi chúng vào bảng điều khiển hoặc ghi chúng vào một tệp hoặc gửi chúng đến dịch vụ ghi nhật ký mạng hoặc chuyển tiếp chúng đến nhật ký hệ điều hành hoặc bất cứ điều gì. Trình xử lý có thể bị vô hiệu hóa bằng cách thực hiện setLevel(Level.
Làm cách nào để sử dụng trình xử lý trong Python?Trình xử lý cuộc gọi là một phương thức được sử dụng để xử lý từng lệnh gọi hàm Python. Khi tạo một phiên bản chức năng, bạn nên chỉ định một điểm nhập bao gồm tên tệp và tên trình xử lý cuộc gọi (chẳng hạn như chính. xử lý). Tại bất kỳ thời điểm nào, một phiên bản chức năng duy nhất chỉ xử lý một yêu cầu. |