Python nhiều logger
Khi các ứng dụng trở nên phức tạp hơn, việc có các bản ghi tốt có thể rất hữu ích, không chỉ khi gỡ lỗi mà còn cung cấp thông tin chi tiết về vấn đề/hiệu suất của ứng dụng. Thư viện chuẩn Python đi kèm với một mô-đun ghi nhật ký cung cấp hầu hết các tính năng ghi nhật ký cơ bản và rất tiện dụng nhưng chứa một số điều kỳ quặc có thể khiến bạn đau đầu hàng giờ Show
Qua Sơn Nguyễn Kim Son có kỹ năng cao về kỹ thuật phần mềm và thuật toán ML và luôn cố gắng hết sức để giải quyết vấn đề bằng cách tiếp cận đơn giản CHIA SẺ CHIA SẺ Khi các ứng dụng trở nên phức tạp hơn, việc có các bản ghi tốt có thể rất hữu ích, không chỉ khi gỡ lỗi mà còn cung cấp thông tin chi tiết về các sự cố/hiệu suất của ứng dụng Thư viện chuẩn Python đi kèm với mô-đun ghi nhật ký cung cấp hầu hết các tính năng ghi nhật ký cơ bản. Bằng cách thiết lập chính xác, một thông báo nhật ký có thể mang lại nhiều thông tin hữu ích về thời gian và vị trí nhật ký được kích hoạt cũng như bối cảnh nhật ký, chẳng hạn như quy trình/luồng đang chạy Mặc dù có những ưu điểm, nhưng mô-đun ghi nhật ký thường bị bỏ qua vì phải mất một thời gian để thiết lập đúng cách và mặc dù đã hoàn thành, theo ý kiến của tôi, tài liệu ghi nhật ký chính thức tại https. // tài liệu. con trăn. org/3/thư viện/ghi nhật ký. html không thực sự cung cấp các phương pháp hay nhất về ghi nhật ký hoặc nêu bật một số điều bất ngờ khi ghi nhật ký Hướng dẫn ghi nhật ký Python này không phải là một tài liệu hoàn chỉnh về mô-đun ghi nhật ký mà là hướng dẫn “bắt đầu” giới thiệu một số khái niệm ghi nhật ký cũng như một số “khắc phục sự cố” cần lưu ý. Bài đăng sẽ kết thúc với các phương pháp hay nhất và chứa một số gợi ý cho các chủ đề ghi nhật ký nâng cao hơn Xin lưu ý rằng tất cả các đoạn mã trong bài đăng giả sử rằng bạn đã nhập mô-đun ghi nhật ký
Các khái niệm về ghi nhật ký PythonPhần này cung cấp tổng quan về một số khái niệm thường gặp trong mô-đun ghi nhật ký Cấp độ ghi nhật ký PythonCấp độ nhật ký tương ứng với “tầm quan trọng” mà nhật ký được đưa ra. nhật ký "lỗi" sẽ khẩn cấp hơn nhật ký "cảnh báo", trong khi nhật ký "gỡ lỗi" chỉ hữu ích khi gỡ lỗi ứng dụng Có sáu cấp độ nhật ký trong Python; . NOTSET=0, DEBUG=10, INFO=20, WARN=30, ERROR=40, và CRITICAL=50 Tất cả các cấp đều khá đơn giản (DEBUG < INFO < WARN ) ngoại trừ NOTSET, tính đặc biệt của nó sẽ được giải quyết tiếp theo Định dạng nhật ký PythonTrình định dạng nhật ký về cơ bản làm phong phú thông điệp tường trình bằng cách thêm thông tin ngữ cảnh vào đó. Có thể hữu ích khi biết nhật ký được gửi khi nào, ở đâu (tệp Python, số dòng, phương thức, v.v. ) và ngữ cảnh bổ sung như luồng và quy trình (có thể cực kỳ hữu ích khi gỡ lỗi ứng dụng đa luồng) Ví dụ: khi nhật ký “hello world” được gửi qua trình định dạng nhật ký
nó sẽ trở thành
Trình xử lý ghi nhật ký PythonTrình xử lý nhật ký là thành phần ghi/hiển thị nhật ký một cách hiệu quả. 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
Thư viện tiêu chuẩn cung cấp một số trình xử lý đủ cho các trường hợp sử dụng phổ biến. . Những cái phổ biến nhất là StreamHandler và FileHandler
Trình ghi nhật ký PythonLogger có lẽ là thứ sẽ được sử dụng trực tiếp thường xuyên nhất trong mã và cũng là thứ phức tạp nhất. Một logger mới có thể được lấy bằng cách
Một logger có ba lĩnh vực chính
Một logger là duy nhất theo tên, nghĩa là nếu một logger có tên “toto” đã được tạo, các lệnh gọi sau đó của 1 sẽ trả về cùng một đối tượng
Như bạn có thể đoán, logger có một hệ thống phân cấp. Trên cùng của hệ thống phân cấp là trình ghi nhật ký gốc, có thể được truy cập thông qua ghi nhật ký. nguồn gốc. Trình ghi nhật ký này được gọi khi các phương thức như 2 được sử dụng. Theo mặc định, cấp độ nhật ký gốc là WARN, vì vậy mọi nhật ký có cấp độ thấp hơn (ví dụ: qua 3) sẽ bị bỏ qua. Một điểm đặc biệt khác của trình ghi nhật ký gốc là trình xử lý mặc định của nó sẽ được tạo lần đầu tiên khi nhật ký có mức lớn hơn WARN được ghi. Sử dụng bộ ghi gốc trực tiếp hoặc gián tiếp thông qua các phương pháp như 2 thường không được khuyến nghịTheo mặc định, khi một bộ ghi mới được tạo, cha của nó sẽ được đặt thành bộ ghi gốc 0Tuy nhiên, thiết bị ghi nhật ký sử dụng “ký hiệu dấu chấm”, nghĩa là thiết bị ghi nhật ký có tên “a. b” sẽ là con của logger “a. ” Tuy nhiên, điều này chỉ đúng nếu logger “a” đã được tạo, nếu không thì “ab” cha vẫn là gốc 1Khi bộ ghi nhật ký quyết định xem nhật ký có vượt qua được hay không theo kiểm tra mức độ (e. g. , nếu cấp nhật ký thấp hơn cấp nhật ký, nhật ký sẽ bị bỏ qua), nó sử dụng “mức hiệu quả” thay vì cấp thực tế. Mức hiệu quả giống như mức của bộ ghi nếu mức đó không phải là NOTSET, tôi. e. , tất cả các giá trị từ GỠ LỖI cho đến QUAN TRỌNG; Theo mặc định, trình ghi nhật ký mới có mức NOTSET và vì trình ghi nhật ký gốc có mức CẢNH BÁO, mức hiệu quả của trình ghi nhật ký sẽ là WARN. Vì vậy, ngay cả khi một trình ghi nhật ký mới có một số trình xử lý được đính kèm, những trình xử lý này sẽ không được gọi trừ khi mức nhật ký vượt quá WARN 2Theo mặc định, cấp độ nhật ký sẽ được sử dụng để quyết định nhật ký đi qua. Nếu cấp nhật ký thấp hơn cấp nhật ký, nhật ký sẽ bị bỏ qua Các phương pháp hay nhất về ghi nhật ký PythonMô-đun ghi nhật ký thực sự rất tiện dụng, nhưng nó chứa một số điều kỳ quặc có thể khiến ngay cả những nhà phát triển Python giỏi nhất cũng phải đau đầu trong nhiều giờ. Dưới đây là những cách thực hành tốt nhất để sử dụng mô-đun này theo ý kiến của tôi
7Sau khi bạn có thể tạo một logger mới và sử dụng nó 0
Nếu bạn quan tâm đến các phương pháp hay nhất khác, hãy đọc 10 lỗi phổ biến nhất mà các nhà phát triển Python mắc phải của đồng nghiệp Toptaler Martin Chikilian Hiểu những điều cơ bảnCông cụ sửa lỗi là gì?Công cụ sửa lỗi là công cụ cho phép nhà phát triển phát hiện lỗi và điều tra sự cố. Nó có thể là một công cụ dòng lệnh như gdb, pdb (dành cho Python) hoặc có thể được nhúng trong IDE (Visual Studio, bộ ý tưởng, v.v.) Nhật ký gỡ lỗi là gì?Đây chỉ đơn giản là đầu ra của chương trình, một phiên bản tốt hơn của “bản in” theo thuật ngữ của giáo dân. Trong ngữ cảnh của ứng dụng web, nhật ký này thường chứa thông tin yêu cầu đến như đường dẫn yêu cầu, thời gian yêu cầu, trạng thái HTTP, v.v. "Đăng nhập" trong Python là gì?Ghi nhật ký là một mô-đun trong thư viện chuẩn Python cung cấp nhật ký có định dạng phong phú với bộ lọc linh hoạt và khả năng chuyển hướng nhật ký sang các nguồn khác như nhật ký hệ thống hoặc email Trình gỡ lỗi Python là gì?Trình gỡ lỗi python phổ biến nhất là pdb. Hiện tại có một số dự án đang làm việc để cải thiện khả năng sử dụng của pdb bằng cách cung cấp tính năng hoàn thành tab, cú pháp màu, duyệt mã hoặc gỡ lỗi từ xa. Các dự án này bao gồm ipdb, pudb và wdb. Ngoài ra còn có một số trình gỡ lỗi dành riêng cho IDE như công cụ pydev hoặc PTVS Thẻ Người làm việc tự do? Tìm công việc tiếp theo của bạn. Việc làm Lập trình viên Python Xem thông tin đầy đủ Sơn Nguyễn Kim Nhà phát triển Python Giới thiệu về tác giả Son có kỹ năng cao về công nghệ phần mềm và các thuật toán ML, đồng thời luôn cố gắng hết sức để giải quyết các vấn đề bằng cách tiếp cận đơn giản nhưng hiệu quả, giúp mã có thể duy trì trong thời gian dài. Là một doanh nhân, anh tận tâm với công việc và hiểu rõ tầm quan trọng của tinh thần trách nhiệm và sự chủ động. Anh ấy có thể giao tiếp hiệu quả với cả hai bên kinh doanh và kỹ thuật thuê con trai Bình luậnLaszlo Marai hừm. Tại sao bạn lại định cấu hình trình ghi nhật ký của mình từ mã (giống như cách bạn thực hiện trong hàm get_logger và hai hàm get_* khác) thay vì sử dụng từ điển (xem ghi nhật ký. cấu hình. dictConfig) hoặc tệp cấu hình (ghi nhật ký. cấu hình. fileConfig) như được mô tả tại đây. https. // tài liệu. con trăn. org/3/thư viện/ghi nhật ký. cấu hình. html Laszlo Marai hừm. Tại sao bạn lại định cấu hình trình ghi nhật ký của mình từ mã (giống như cách bạn thực hiện trong hàm get_logger và hai hàm get_* khác) thay vì sử dụng từ điển (xem ghi nhật ký. cấu hình. dictConfig) hoặc tệp cấu hình (ghi nhật ký. cấu hình. fileConfig) như được mô tả tại đây. https. // tài liệu. con trăn. org/3/thư viện/ghi nhật ký. cấu hình. html nguyễn kim sơn Có, hoàn toàn có thể định cấu hình trình ghi nhật ký từ tệp cấu hình (. yml,. json) và đó thực sự là cách tốt nhất để làm như vậy. Nhưng vì tôi muốn tất cả các đoạn mã có thể được sử dụng dưới dạng sao chép/dán nên tôi chọn cấu hình bộ ghi trực tiếp trong mã nguyễn kim sơn Có, hoàn toàn có thể định cấu hình trình ghi nhật ký từ tệp cấu hình (. yml,. json) và đó thực sự là cách tốt nhất để làm như vậy. Nhưng vì tôi muốn tất cả các đoạn mã có thể được sử dụng dưới dạng sao chép/dán nên tôi chọn cấu hình bộ ghi trực tiếp trong mã Vô danh "Theo mặc định, cấp độ nhật ký sẽ được sử dụng để quyết định nhật ký đi qua. " có thể muốn đại tu điều đó Sven Đoạn mã thực sự không tốt lắm. vấn đề 1. gọi 2 lần get_logger(__name__) bên trong một tệp hoặc chỉ gọi một hàm chứa get_logger(__name__) sẽ dẫn đến có nhiều phiên bản của cùng một trình ghi -> thông báo lần đầu được in 1x, lần thứ 2 thông báo được in 2x, lần thứ 3 . giải pháp. dict của logger đang sử dụng và trả lại logger nếu đã có trong dict nếu không tạo 1 và lưu trữ trong dict Vấn đề 2. tạo một phiên bản mới của TimedRotatingFileHandler cho mỗi logger sử dụng cùng một tệp sẽ dẫn đến việc ghi đè các tệp khi được gọi. giải pháp. xác định 1 phiên bản TimedRotatingFileHandler và sử dụng nó cho tất cả các logger. hoặc sử dụng một tên tệp khác cho mỗi bộ ghi (nhưng trong dự án lớn hơn, bạn sẽ có rất nhiều tệp) Vấn đề 3. ConsoleHandler giống như Sự cố 2 không dẫn đến sự cố lớn nhưng không thể là Phương pháp hay nhất để có nhiều phiên bản nếu một phiên bản thực hiện cùng một công việc. Vì vậy, đoạn mã này rõ ràng là không bao giờ được sử dụng trong một dự án thực tế thất nghiệp Rất đẹp. Cám ơn vì đã chia sẻ Arthur Bowers Tôi đã đặt cấp độ của mình thành ghi nhật ký. LỖI nhưng nó vẫn đang ghi thông báo INFO. làm thế nào mà? phê bình Đây là một trong những hướng dẫn đăng nhập tồi tệ nhất mà tôi từng thấy Keith A. cổng tây tại sao? . Sven đã đưa ra một lời phê bình tốt đẹp. hoặc ít nhất là trỏ đến một cái tốt hơn Đa xử lý ghi nhật ký Python có an toàn không?Đa xử lý với mô-đun ghi nhật ký — QueueHandler
. Nếu bạn muốn nhiều quy trình ghi vào cùng một tệp nhật ký, thì bạn phải quản lý quyền truy cập vào tệp của mình theo cách thủ công. Although logging module is thread-safe, it's not process-safe. If you want multiple processes to write to the same log file, then you have to manually take care of the access to your file.
Là chủ đề loggerCó thể sử dụng mô-đun ghi nhật ký trực tiếp từ nhiều luồng. Lý do là vì mô-đun ghi nhật ký an toàn theo luồng .
Ghi nhật ký có hoạt động với đa xử lý không?Mô-đun đa xử lý có bộ ghi riêng với tên “đa xử lý“. Trình ghi nhật ký này được sử dụng trong các đối tượng và chức năng trong mô-đun đa xử lý để ghi nhật ký các thông báo, chẳng hạn như các thông báo gỡ lỗi cho biết các quy trình đang chạy hoặc đã tắt máy. Chúng ta có thể lấy bộ ghi này và sử dụng nó để ghi nhật ký .
Năm cấp độ đăng nhập trong Python là gì?Python có sáu cấp độ nhật ký với mỗi cấp độ được gán một số nguyên cụ thể cho biết mức độ nghiêm trọng của nhật ký. . KHÔNG ĐẶT = 0 GỠ LỖI=10 THÔNG TIN=20 CẢNH BÁO=30 LỖI=40 TIÊU CHÍ = 50 |