Hướng dẫn python logging in a library - python đăng nhập thư viện
Mã nguồn: lib/log/__ init__.py Lib/logging/__init__.py Show
Mô -đun này xác định các chức năng và các lớp triển khai hệ thống ghi nhật ký sự kiện linh hoạt cho các ứng dụng và thư viện. Lợi ích chính của việc có API ghi nhật ký được cung cấp bởi một mô-đun thư viện tiêu chuẩn là tất cả các mô-đun Python có thể tham gia ghi nhật ký, do đó nhật ký ứng dụng của bạn có thể bao gồm các tin nhắn của riêng bạn được tích hợp với các thông báo từ các mô-đun bên thứ ba. Ví dụ đơn giản nhất: >>> import logging >>> logging.warning('Watch out!') WARNING:root:Watch out! Mô -đun cung cấp rất nhiều chức năng và tính linh hoạt. Nếu bạn không quen thuộc với việc đăng nhập, cách tốt nhất để nắm bắt với nó là xem các hướng dẫn (xem các liên kết ở trên và bên phải).see the links above and on the right). Các lớp cơ bản được xác định bởi mô -đun, cùng với các chức năng của chúng, được liệt kê dưới đây.
Đối tượng loggerLoggers có các thuộc tính và phương thức sau. Lưu ý rằng loggers không bao giờ nên được khởi tạo trực tiếp, nhưng luôn thông qua hàm cấp mô-đun Stack (most recent call last):0 có cùng tên sẽ luôn trả về một tham chiếu cho cùng một đối tượng logger. Stack (most recent call last):1 có khả năng là một giá trị phân cấp được phân tách theo thời gian, như Stack (most recent call last):2 (mặc dù nó cũng có thể chỉ là Stack (most recent call last):3, ví dụ). Loggers nằm hơn nữa trong danh sách phân cấp là trẻ em của loggers cao hơn trong danh sách. Ví dụ, được đưa ra một logger có tên là Stack (most recent call last):3, loggers có tên của Stack (most recent call last):5, Stack (most recent call last):2 và Stack (most recent call last):7 đều là hậu duệ của Stack (most recent call last):3. Phân cấp tên logger tương tự như hệ thống phân cấp gói Python và giống hệt với nó nếu bạn tổ chức các trình ghi nhật ký của mình trên cơ sở mỗi mô-đun bằng cách sử dụng cấu trúc được đề xuất Stack (most recent call last):9. Điều đó bởi vì trong một mô -đun, FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)0 là tên mô -đun trong không gian tên gói Python. ClassLogging.Logger¶ Tuyên truyền¶logging.Logger¶ propagate¶ Nếu thuộc tính này đánh giá là TRUE, các sự kiện được ghi vào logger này sẽ được chuyển cho các trình xử lý của các trình ghi nhật ký cấp cao hơn (tổ tiên), ngoài bất kỳ trình xử lý nào được gắn vào logger này. Các thông điệp được truyền trực tiếp đến các trình xử lý của tổ tiên - cả cấp độ cũng không phải là bộ lọc của các trình ghi nhật ký của tổ tiên trong câu hỏi đều được xem xét. Nếu điều này đánh giá là sai, các tin nhắn ghi nhật ký không được chuyển cho người xử lý của các trình ghi nhật ký tổ tiên. Đánh vần nó bằng một ví dụ: nếu thuộc tính tuyên truyền của logger có tên FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)1 đánh giá là true, bất kỳ sự kiện nào được ghi vào FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)1 thông qua một cuộc gọi phương thức như FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)3 sẽ lần lượt vượt qua mức độ của logger] Các trình xử lý được gắn vào logger có tên FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)4, FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)5 và bộ ghi gốc, sau khi lần đầu tiên được chuyển cho bất kỳ trình xử lý nào được gắn vào FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)1. Nếu bất kỳ logger nào trong chuỗi FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)1, FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)4, FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)5 có thuộc tính 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset0 được đặt thành FALSE, thì đó là bộ ghi cuối cùng có người xử lý được cung cấp sự kiện để xử lý và việc nhân giống dừng tại thời điểm đó. Hàm tạo đặt thuộc tính này thành 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset1. Ghi chú Nếu bạn gắn một trình xử lý vào một logger và một hoặc nhiều tổ tiên của nó, nó có thể phát ra cùng một bản ghi nhiều lần. Nói chung, bạn không cần phải gắn một trình xử lý vào nhiều hơn một logger - nếu bạn chỉ gắn nó vào logger thích hợp cao nhất trong phân cấp logger, thì nó sẽ thấy tất cả các sự kiện được ghi bởi tất cả các trình ghi nhật ký, miễn là tuyên truyền của chúng Cài đặt được đặt thành 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset1. Một kịch bản phổ biến là chỉ gắn trình xử lý vào logger gốc và để tuyên truyền sẽ chăm sóc phần còn lại. setlevel (cấp)(level)¶ Đặt ngưỡng cho logger này thành cấp. Các tin nhắn ghi nhật ký ít nghiêm trọng hơn mức sẽ bị bỏ qua; Các tin nhắn ghi nhật ký có mức độ nghiêm trọng hoặc cao hơn sẽ được phát ra bởi bất kỳ người xử lý hoặc dịch vụ xử lý nào trong logger này, trừ khi mức độ xử lý đã được đặt ở mức độ nghiêm trọng cao hơn mức. Khi logger được tạo, mức được đặt thành 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset3 (khiến tất cả các thông báo được xử lý khi logger là logger gốc hoặc ủy quyền cho cha mẹ khi logger là logger không root). Lưu ý rằng logger gốc được tạo với cấp 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset4. Thuật ngữ ‘Phái đoàn cho cha mẹ có nghĩa là nếu một logger có mức độ không có, thì chuỗi loggers của tổ tiên của nó được đi qua cho đến khi một tổ tiên có mức độ khác không được tìm thấy, hoặc đạt được gốc. Nếu một tổ tiên được tìm thấy với một cấp độ khác ngoài notset, thì mức độ tổ tiên đó được coi là mức hiệu quả của logger nơi tìm kiếm tổ tiên bắt đầu và được sử dụng để xác định cách xử lý sự kiện ghi nhật ký. Nếu đạt được gốc và nó có một mức độ không có, thì tất cả các tin nhắn sẽ được xử lý. Nếu không, mức độ gốc sẽ được sử dụng làm mức hiệu quả. Xem các cấp độ ghi nhật ký để biết danh sách các cấp độ.Logging Levels for a list of levels. Đã thay đổi trong phiên bản 3.2: Tham số cấp hiện chấp nhận biểu diễn chuỗi của cấp độ như ‘thông tin thay thế cho các hằng số số nguyên như 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset5. Note, however, that levels are internally stored as integers, and methods such as e.g. 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset6 and 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset7 will return/expect to be passed integers. Isenablesfor (cấp) ¶(level)¶ Cho biết nếu một thông điệp về mức độ nghiêm trọng sẽ được xử lý bởi logger này. Phương pháp này trước tiên kiểm tra mức cấp độ mô-đun được đặt bởi 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset8 và sau đó mức độ hiệu quả của logger được xác định bởi 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset6. geteffectivelevel () ¶()¶ Chỉ ra mức hiệu quả cho logger này. Nếu một giá trị khác với 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset3 đã được đặt bằng cách sử dụng old_factory = logging.getLogRecordFactory() def record_factory(*args, **kwargs): record = old_factory(*args, **kwargs) record.custom_attribute = 0xdecafbad return record logging.setLogRecordFactory(record_factory)1, nó sẽ được trả về. Mặt khác, hệ thống phân cấp được đi về phía gốc cho đến khi một giá trị khác với 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset3 được tìm thấy và giá trị đó được trả về. Giá trị được trả về là một số nguyên, thường là một trong số old_factory = logging.getLogRecordFactory() def record_factory(*args, **kwargs): record = old_factory(*args, **kwargs) record.custom_attribute = 0xdecafbad return record logging.setLogRecordFactory(record_factory)3, old_factory = logging.getLogRecordFactory() def record_factory(*args, **kwargs): record = old_factory(*args, **kwargs) record.custom_attribute = 0xdecafbad return record logging.setLogRecordFactory(record_factory)4, v.v. GetChild (hậu tố) ¶(suffix)¶ Trả về một logger là hậu duệ của logger này, như được xác định bởi hậu tố. Do đó, old_factory = logging.getLogRecordFactory() def record_factory(*args, **kwargs): record = old_factory(*args, **kwargs) record.custom_attribute = 0xdecafbad return record logging.setLogRecordFactory(record_factory)5 sẽ trả về cùng một logger như sẽ được trả về bởi old_factory = logging.getLogRecordFactory() def record_factory(*args, **kwargs): record = old_factory(*args, **kwargs) record.custom_attribute = 0xdecafbad return record logging.setLogRecordFactory(record_factory)6. Đây là một phương thức tiện lợi, hữu ích khi bộ ghi nhật ký cha mẹ được đặt tên bằng ví dụ: FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)0 chứ không phải là một chuỗi theo nghĩa đen. Mới trong phiên bản 3.2. Debug (tin nhắn, *args, ** kwargs) ¶(msg, *args, **kwargs)¶Ghi lại một thông báo với cấp old_factory = logging.getLogRecordFactory() def record_factory(*args, **kwargs): record = old_factory(*args, **kwargs) record.custom_attribute = 0xdecafbad return record logging.setLogRecordFactory(record_factory)8 trên logger này. MSG là chuỗi định dạng thông báo và ARGS là các đối số được hợp nhất thành MSG bằng toán tử định dạng chuỗi. . Có bốn đối số từ khóa trong kwargs được kiểm tra: exc_info, stack_info, Stacklevel và Extra. Nếu exc_info không đánh giá là sai, nó sẽ khiến thông tin ngoại lệ được thêm vào thông báo ghi nhật ký. Nếu một bộ ngoại lệ (ở định dạng được trả về bởi old_factory = logging.getLogRecordFactory() def record_factory(*args, **kwargs): record = old_factory(*args, **kwargs) record.custom_attribute = 0xdecafbad return record logging.setLogRecordFactory(record_factory)9) hoặc một thể hiện ngoại lệ được cung cấp, nó sẽ được sử dụng; Nếu không, old_factory = logging.getLogRecordFactory() def record_factory(*args, **kwargs): record = old_factory(*args, **kwargs) record.custom_attribute = 0xdecafbad return record logging.setLogRecordFactory(record_factory)9 được gọi để có được thông tin ngoại lệ. Đối số từ khóa tùy chọn thứ hai là stack_info, mặc định là class MyLogger(logging.getLoggerClass()): # ... override behaviour here1. Nếu đúng, thông tin ngăn xếp được thêm vào thông báo ghi nhật ký, bao gồm cả cuộc gọi ghi nhật ký thực tế. Lưu ý rằng đây không phải là thông tin ngăn xếp giống như thông tin được hiển thị thông qua việc chỉ định exc_info: cái trước là khung ngăn xếp từ dưới cùng của ngăn xếp cho đến cuộc gọi ghi nhật ký trong luồng hiện tại, trong khi đó là thông tin về các khung ngăn xếp đã không còn nữa, Theo một ngoại lệ, trong khi tìm kiếm người xử lý ngoại lệ. Bạn có thể chỉ định stack_info độc lập với exc_info, ví dụ: Để chỉ ra cách bạn đến một điểm nhất định trong mã của bạn, ngay cả khi không có ngoại lệ nào được nêu ra. Các khung ngăn xếp được in theo dòng tiêu đề có nội dung: Stack (most recent call last): Điều này bắt chước class MyLogger(logging.getLoggerClass()): # ... override behaviour here2 được sử dụng khi hiển thị các khung ngoại lệ. Đối số từ khóa tùy chọn thứ ba là Stacklevel, mặc định là class MyLogger(logging.getLoggerClass()): # ... override behaviour here3. Nếu lớn hơn 1, số lượng khung ngăn xếp tương ứng được bỏ qua khi tính toán số dòng và tên hàm được đặt trong class MyLogger(logging.getLoggerClass()): # ... override behaviour here4 được tạo cho sự kiện ghi nhật ký. Điều này có thể được sử dụng trong các trình trợ giúp ghi nhật ký để tên hàm, tên tệp và số dòng được ghi lại không phải là thông tin cho hàm/phương thức của người trợ giúp, mà là người gọi của nó. Tên của tham số này phản ánh cái tương đương trong mô -đun class MyLogger(logging.getLoggerClass()): # ... override behaviour here5. Đối số từ khóa thứ tư là thêm có thể được sử dụng để truyền từ điển được sử dụng để điền vào __dict__ của class MyLogger(logging.getLoggerClass()): # ... override behaviour here4 được tạo cho sự kiện ghi nhật ký với các thuộc tính do người dùng xác định. Các thuộc tính tùy chỉnh này sau đó có thể được sử dụng như bạn muốn. Ví dụ, chúng có thể được kết hợp vào các tin nhắn đã ghi. Ví dụ: FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d) sẽ in một cái gì đó như 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset Các phím trong từ điển được truyền thêm không nên đụng độ với các phím được sử dụng bởi hệ thống ghi nhật ký. (Xem phần trên các thuộc tính logrecord để biết thêm thông tin về các khóa được sử dụng bởi hệ thống ghi nhật ký.)LogRecord attributes for more information on which keys are used by the logging system.) Nếu bạn chọn sử dụng các thuộc tính này trong các tin nhắn đã đăng nhập, bạn cần thực hiện một số chăm sóc. Ví dụ, trong ví dụ trên, class MyLogger(logging.getLoggerClass()): # ... override behaviour here7 đã được thiết lập với một chuỗi định dạng mong đợi ‘clientip và’ người dùng trong từ điển thuộc tính của class MyLogger(logging.getLoggerClass()): # ... override behaviour here4. Nếu những thứ này bị thiếu, thông báo sẽ không được ghi lại vì ngoại lệ định dạng chuỗi sẽ xảy ra. Vì vậy, trong trường hợp này, bạn luôn cần phải vượt qua từ điển thêm với các phím này. Mặc dù điều này có thể gây khó chịu, tính năng này được sử dụng trong các trường hợp chuyên ngành, chẳng hạn như các máy chủ đa luồng trong đó cùng một mã thực thi trong nhiều bối cảnh và các điều kiện thú vị phát sinh phụ thuộc vào bối cảnh này (chẳng hạn như địa chỉ IP của máy khách từ xa và được xác thực Tên người dùng, trong ví dụ trên). Trong những trường hợp như vậy, có khả năng các class MyLogger(logging.getLoggerClass()): # ... override behaviour here7 chuyên dụng sẽ được sử dụng với các ____60 cụ thể. Nếu không có trình xử lý nào được gắn vào logger này (hoặc bất kỳ tổ tiên nào của nó, có tính đến các thuộc tính Stack (most recent call last):1 có liên quan), tin nhắn sẽ được gửi đến trình xử lý được đặt vào Stack (most recent call last):2. Đã thay đổi trong phiên bản 3.2: Tham số Stack_info đã được thêm vào.The stack_info parameter was added. Đã thay đổi trong phiên bản 3.5: Tham số Exc_info hiện có thể chấp nhận các trường hợp ngoại lệ.The exc_info parameter can now accept exception instances. Thay đổi trong phiên bản 3.8: Tham số Stacklevel đã được thêm vào.The stacklevel parameter was added. thông tin (tin nhắn, *args, ** kwargs) ¶(msg, *args, **kwargs)¶Ghi lại một thông báo với cấp 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset5 trên logger này. Các đối số được giải thích là đối với Stack (most recent call last):4. Cảnh báo (tin nhắn, *args, ** kwargs) ¶(msg, *args, **kwargs)¶ Ghi lại một thông báo với cấp 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset4 trên logger này. Các đối số được giải thích là đối với Stack (most recent call last):4. Ghi chú Có một phương pháp lỗi thời Stack (most recent call last):7 có chức năng giống hệt với Stack (most recent call last):8. Vì Stack (most recent call last):7 không dùng nữa, vui lòng không sử dụng nó - sử dụng Stack (most recent call last):8 thay thế. Lỗi (tin nhắn, *args, ** kwargs) ¶(msg, *args, **kwargs)¶ Ghi lại một thông báo với cấp FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)1 trên logger này. Các đối số được giải thích là đối với Stack (most recent call last):4. phê phán (tin nhắn, *args, ** kwargs) ¶(msg, *args, **kwargs)¶ Ghi lại một thông báo với cấp FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)3 trên logger này. Các đối số được giải thích là đối với Stack (most recent call last):4. log (cấp, tin nhắn, *args, ** kwargs) ¶(level, msg, *args, **kwargs)¶ Ghi lại một thông báo với mức số nguyên trên logger này. Các đối số khác được giải thích là đối với Stack (most recent call last):4. Ngoại lệ (tin nhắn, *args, ** kwargs) ¶(msg, *args, **kwargs)¶ Ghi lại một thông báo với cấp FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)1 trên logger này. Các đối số được giải thích là đối với Stack (most recent call last):4. Thông tin ngoại lệ được thêm vào thông báo ghi nhật ký. Phương pháp này chỉ nên được gọi từ một người xử lý ngoại lệ. addfilter (bộ lọc) ¶(filter)¶ Thêm bộ lọc được chỉ định vào logger này. removefilter (bộ lọc) ¶(filter)¶Xóa bộ lọc được chỉ định khỏi bộ ghi này. bộ lọc (ghi) ¶(record)¶Áp dụng các bộ lọc logger này vào bản ghi và trả về 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset1 nếu bản ghi được xử lý. Các bộ lọc được tư vấn lần lượt, cho đến khi một trong số chúng trả về giá trị sai. Nếu không ai trong số họ trả về giá trị sai, bản ghi sẽ được xử lý (được chuyển cho người xử lý). Nếu một người trả về một giá trị sai, không có quá trình xử lý nào của bản ghi xảy ra. AddHandler (HDLR) ¶(hdlr)¶ Thêm HDLR xử lý được chỉ định vào logger này. remoleHandler (hdlr) ¶(hdlr)¶Loại bỏ HDLR xử lý được chỉ định khỏi bộ ghi này. FindCaller (stack_info = false, Stacklevel = 1) ¶(stack_info=False, stacklevel=1)¶Tìm tên tệp và số dòng người gọi người gọi. Trả về tên tệp, số dòng, tên hàm và thông tin xếp chồng dưới dạng bộ thứ 4 yếu tố. Thông tin ngăn xếp được trả về dưới dạng FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)9 trừ khi Stack_info là 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset1. Tham số Stacklevel được truyền từ mã gọi Stack (most recent call last):4 và các API khác. Nếu lớn hơn 1, phần dư được sử dụng để bỏ qua các khung ngăn xếp trước khi xác định các giá trị được trả về. Điều này thường sẽ hữu ích khi gọi API ghi nhật ký từ mã trợ giúp/trình bao bọc, để thông tin trong nhật ký sự kiện không liên quan đến mã trợ giúp/trình bao bọc, mà là mã gọi nó. Xử lý (ghi)(record)¶ Xử lý một bản ghi bằng cách chuyển nó cho tất cả các trình xử lý được liên kết với bộ ghi này và tổ tiên của nó (cho đến khi tìm thấy giá trị giả của tuyên truyền). Phương pháp này được sử dụng cho các bản ghi không được lấy từ một ổ cắm, cũng như các bản ghi được tạo tại địa phương. Lọc cấp logger được áp dụng bằng cách sử dụng 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset2. Makerecord (Tên, Cấp độ, FN, LNO, MSG, ARGS, EXC_INFO, func = none, Extra = none, sinfo = none) ¶(name, level, fn, lno, msg, args, exc_info, func=None, extra=None, sinfo=None)¶ Đây là một phương thức nhà máy có thể được ghi đè trong các lớp con để tạo các trường hợp class MyLogger(logging.getLoggerClass()): # ... override behaviour here4 chuyên dụng. HasHandlers ()()¶ Kiểm tra xem liệu logger này có trình xử lý được cấu hình không. Điều này được thực hiện bằng cách tìm kiếm người xử lý trong bộ ghi này và cha mẹ của nó trong hệ thống phân cấp logger. Trả về 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset1 Nếu tìm thấy một người xử lý, khác class MyLogger(logging.getLoggerClass()): # ... override behaviour here1. Phương pháp ngừng tìm kiếm thứ bậc bất cứ khi nào một logger với thuộc tính ‘tuyên truyền được đặt thành sai - đó sẽ là logger cuối cùng được kiểm tra sự tồn tại của người xử lý. Mới trong phiên bản 3.2. Đã thay đổi trong phiên bản 3.7: Loggers hiện có thể được ngâm và không được giải thích.Loggers can now be pickled and unpickled. Mức ghi nhật kýCác giá trị số của các mức ghi nhật ký được đưa ra trong bảng sau. Đây chủ yếu được quan tâm nếu bạn muốn xác định cấp độ của riêng bạn và cần chúng có các giá trị cụ thể liên quan đến các cấp độ được xác định trước. Nếu bạn xác định một mức có cùng giá trị số, nó sẽ ghi đè lên giá trị được xác định trước; Tên được xác định trước bị mất.
Đối tượng xử lýNgười xử lý có các thuộc tính và phương thức sau. Lưu ý rằng Stack (most recent call last):0 không bao giờ được khởi tạo trực tiếp; Lớp này hoạt động như một cơ sở cho các lớp con hữu ích hơn. Tuy nhiên, phương thức logging.getLogger(name) 3 trong các lớp con cần gọi logging.getLogger(name) 4.Khởi tạo thể hiện Stack (most recent call last):0 bằng cách đặt cấp độ của nó, đặt danh sách các bộ lọc thành danh sách trống và tạo khóa (sử dụng logging.getLogger(name) 6) để tuần tự hóa quyền truy cập vào cơ chế I/O. createlock () ¶()¶Khởi tạo một khóa luồng có thể được sử dụng để tuần tự hóa quyền truy cập vào chức năng I/O bên dưới có thể không phải là ThreadSafe. có được, thu được()¶()¶Có được khóa luồng được tạo bằng Phát hành khóa luồng thu được với Đặt ngưỡng cho người xử lý này lên cấp. Tin nhắn ghi nhật ký ít nghiêm trọng hơn mức sẽ bị bỏ qua. Khi một trình xử lý được tạo, mức được đặt thành 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset3 (điều này khiến tất cả các thông báo được xử lý). Xem các cấp độ ghi nhật ký để biết danh sách các cấp độ.Logging Levels for a list of levels. Đã thay đổi trong phiên bản 3.2: Tham số cấp hiện chấp nhận biểu diễn chuỗi của cấp độ như ‘thông tin thay thế cho các hằng số số nguyên như 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset5. SetFormatter (FMT) ¶(fmt)¶ Đặt class MyLogger(logging.getLoggerClass()): # ... override behaviour here7 cho người xử lý này thành FMT. addfilter (bộ lọc) ¶(filter)¶ Thêm bộ lọc được chỉ định vào trình xử lý này. removefilter (bộ lọc) ¶(filter)¶Xóa bộ lọc được chỉ định khỏi trình xử lý này. bộ lọc (ghi) ¶(record)¶Áp dụng các bộ lọc xử lý này vào hồ sơ và trả về 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset1 nếu bản ghi được xử lý. Các bộ lọc được tư vấn lần lượt, cho đến khi một trong số chúng trả về giá trị sai. Nếu không ai trong số họ trả về một giá trị sai, bản ghi sẽ được phát ra. Nếu một người trả về một giá trị sai, trình xử lý sẽ không phát ra bản ghi. tuôn ra()¶()¶ Đảm bảo tất cả đầu ra ghi nhật ký đã được xóa. Phiên bản này không có gì và được dự định sẽ được thực hiện bởi các lớp con. gần()¶()¶Tidy lên bất kỳ tài nguyên được sử dụng bởi người xử lý. Phiên bản này không có đầu ra nhưng loại bỏ trình xử lý khỏi danh sách các trình xử lý nội bộ được đóng khi Stack (most recent call last):03 được gọi. Các lớp con nên đảm bảo rằng điều này được gọi từ các phương thức ghi đè Stack (most recent call last):04. Xử lý (ghi)(record)¶ Có điều kiện phát ra bản ghi ghi nhật ký được chỉ định, tùy thuộc vào các bộ lọc có thể đã được thêm vào trình xử lý. Kết thúc sự phát xạ thực tế của hồ sơ với việc mua lại/phát hành khóa luồng I/O. Xử lý Hòa giải (ghi) ¶(record)¶Phương pháp này nên được gọi từ người xử lý khi gặp phải ngoại lệ trong cuộc gọi Stack (most recent call last):05. Nếu thuộc tính cấp độ mô-đun Stack (most recent call last):06 là class MyLogger(logging.getLoggerClass()): # ... override behaviour here1, các ngoại lệ sẽ bị bỏ qua âm thầm. Đây là những gì chủ yếu mong muốn đối với một hệ thống ghi nhật ký - hầu hết người dùng sẽ không quan tâm đến các lỗi trong hệ thống ghi nhật ký, họ quan tâm nhiều hơn đến các lỗi ứng dụng. Tuy nhiên, bạn có thể thay thế điều này bằng một trình xử lý tùy chỉnh nếu bạn muốn. Bản ghi được chỉ định là bản ghi được xử lý khi ngoại lệ xảy ra. (Giá trị mặc định của Stack (most recent call last):06 là 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset1, vì nó hữu ích hơn trong quá trình phát triển). Định dạng (ghi) ¶(record)¶ Thực hiện định dạng cho một bản ghi - nếu một định dạng được đặt, hãy sử dụng nó. Nếu không, sử dụng định dạng mặc định cho mô -đun. phát ra (ghi) ¶(record)¶Làm bất cứ điều gì cần thiết để thực sự ghi nhật ký bản ghi ghi nhật ký được chỉ định. Phiên bản này được dự định sẽ được thực hiện bởi các lớp con và do đó tăng Stack (most recent call last):10. Cảnh báo Phương pháp này được gọi sau khi một khóa cấp xử lý được thu thập, được phát hành sau khi phương thức này trả về. Khi bạn ghi đè phương thức này, lưu ý rằng bạn nên cẩn thận khi gọi bất cứ thứ gì gọi các phần khác của API ghi nhật ký có thể khóa, bởi vì điều đó có thể dẫn đến bế tắc. Đặc biệt:
Để biết danh sách các trình xử lý được bao gồm dưới dạng tiêu chuẩn, xem Stack (most recent call last):11. Đối tượng định dạngCác đối tượng class MyLogger(logging.getLoggerClass()): # ... override behaviour here7 có các thuộc tính và phương thức sau. Họ chịu trách nhiệm chuyển đổi một class MyLogger(logging.getLoggerClass()): # ... override behaviour here4 thành (thường là) một chuỗi có thể được giải thích bởi một hệ thống con người hoặc bên ngoài. Cơ sở class MyLogger(logging.getLoggerClass()): # ... override behaviour here7 cho phép một chuỗi định dạng được chỉ định. Nếu không được cung cấp, giá trị mặc định của Stack (most recent call last):15 được sử dụng, chỉ bao gồm thông báo trong cuộc gọi đăng nhập. Để có các mục thông tin bổ sung theo đầu ra được định dạng (chẳng hạn như dấu thời gian), hãy tiếp tục đọc. Một định dạng có thể được khởi tạo bằng một chuỗi định dạng sử dụng kiến thức của các thuộc tính class MyLogger(logging.getLoggerClass()): # ... override behaviour here4 - chẳng hạn như giá trị mặc định được đề cập ở trên sử dụng thực tế là thông điệp và đối số của người dùng được định dạng sẵn thành thuộc tính tin nhắn ________ 54. Chuỗi định dạng này chứa các khóa ánh xạ kiểu Python %tiêu chuẩn. Xem phần Định dạng chuỗi kiểu PrintF để biết thêm thông tin về định dạng chuỗi.printf-style String Formatting for more information on string formatting. Các khóa ánh xạ hữu ích trong class MyLogger(logging.getLoggerClass()): # ... override behaviour here4 được đưa ra trong phần về các thuộc tính logrecord.LogRecord attributes. classLogging.formatter (fmt = none, datefmt = none, style = '%', xác nhận = true, *, mặc định = none) ¶logging.Formatter(fmt=None, datefmt=None, style='%', validate=True, *, defaults=None)¶ Trả về một thể hiện mới của lớp class MyLogger(logging.getLoggerClass()): # ... override behaviour here7. Trường hợp được khởi tạo với toàn bộ chuỗi định dạng cho toàn bộ thông báo, cũng như chuỗi định dạng cho phần ngày/thời gian của tin nhắn. Nếu không có FMT được chỉ định, Stack (most recent call last):15 được sử dụng. Nếu không có DateFMT được chỉ định, định dạng được sử dụng được mô tả trong tài liệu Stack (most recent call last):21. Tham số kiểu có thể là một trong những ‘ %,‘ {{hoặc ‘$ $ và xác định cách thức chuỗi định dạng sẽ được kết hợp với dữ liệu của nó: sử dụng một trong số %-formatting, Stack (most recent call last):22 hoặc Stack (most recent call last):23. Điều này chỉ áp dụng cho chuỗi định dạng FMT (ví dụ: Stack (most recent call last):15 hoặc Stack (most recent call last):25), không phải cho các thông báo nhật ký thực tế được chuyển đến Stack (most recent call last):26, v.v.; Xem bằng cách sử dụng các kiểu định dạng cụ thể trong toàn bộ ứng dụng của bạn để biết thêm thông tin về việc sử dụng {- và $ -formatting cho các thông báo nhật ký.Using particular formatting styles throughout your application for more information on using {- and $-formatting for log messages. Tham số mặc định có thể là một từ điển với các giá trị mặc định để sử dụng trong các trường tùy chỉnh. Ví dụ: Stack (most recent call last):27 Thay đổi trong phiên bản 3.2: Tham số kiểu đã được thêm vào.The style parameter was added. Thay đổi trong phiên bản 3.8: Tham số xác thực đã được thêm vào. Phong cách không chính xác hoặc không phù hợp và FMT sẽ tăng Stack (most recent call last):28. For example: Stack (most recent call last):29. Thay đổi trong phiên bản 3.10: Tham số mặc định đã được thêm vào.The defaults parameter was added. Định dạng (ghi) ¶(record)¶Từ điển thuộc tính của bản ghi được sử dụng làm toán hạng cho hoạt động định dạng chuỗi. Trả về chuỗi kết quả. Trước khi định dạng từ điển, một vài bước chuẩn bị được thực hiện. Thuộc tính tin nhắn của bản ghi được tính toán bằng MSG % Args. Nếu chuỗi định dạng chứa Stack (most recent call last):30, Stack (most recent call last):21 được gọi để định dạng thời gian sự kiện. Nếu có thông tin ngoại lệ, nó được định dạng bằng Stack (most recent call last):32 và được thêm vào tin nhắn. Lưu ý rằng thông tin ngoại lệ được định dạng được lưu trong bộ đệm trong thuộc tính exc_text. Điều này rất hữu ích vì thông tin ngoại lệ có thể được ngâm và gửi qua dây, nhưng bạn nên cẩn thận nếu bạn có nhiều hơn một lớp con class MyLogger(logging.getLoggerClass()): # ... override behaviour here7 tùy chỉnh định dạng thông tin ngoại lệ. Trong trường hợp này, bạn sẽ phải xóa giá trị được lưu trong bộ nhớ cach . Nếu có sẵn thông tin ngăn xếp, nó được thêm vào sau thông tin ngoại lệ, sử dụng Stack (most recent call last):35 để chuyển đổi nó nếu cần thiết. formattime (bản ghi, datefmt = none) ¶(record, datefmt=None)¶ Phương pháp này nên được gọi từ Stack (most recent call last):36 bởi một định dạng muốn sử dụng thời gian được định dạng. Phương pháp này có thể được ghi đè trong các định dạng để cung cấp cho bất kỳ yêu cầu cụ thể nào, nhưng hành vi cơ bản như sau: Nếu DateFMT (một chuỗi) được chỉ định, nó được sử dụng với Stack (most recent call last):37 để định dạng thời gian tạo của bản ghi. Mặt khác, định dạng ‘%y-%m-%d%H:%m:%s, UUU, được sử dụng, trong đó phần UUU là giá trị mili giây và các chữ cái khác theo tài liệu Stack (most recent call last):37. Một thời gian ví dụ trong định dạng này là Stack (most recent call last):39. Chuỗi kết quả được trả về. Chức năng này sử dụng chức năng có thể định cấu hình người dùng để chuyển đổi thời gian tạo thành tuple. Theo mặc định, Stack (most recent call last):40 được sử dụng; Để thay đổi điều này cho một thể hiện định dạng cụ thể, hãy đặt thuộc tính Stack (most recent call last):41 thành một hàm có cùng chữ ký với Stack (most recent call last):40 hoặc Stack (most recent call last):43. Để thay đổi nó cho tất cả các định dạng, ví dụ, nếu bạn muốn tất cả thời gian đăng nhập được hiển thị trong GMT, hãy đặt thuộc tính Stack (most recent call last):41 trong lớp class MyLogger(logging.getLoggerClass()): # ... override behaviour here7. Đã thay đổi trong phiên bản 3.3: Trước đây, định dạng mặc định đã được mã hóa cứng như trong ví dụ này: Stack (most recent call last):46 where the part before the comma is handled by a strptime format string ( Stack (most recent call last):47), and the part after the comma is a millisecond value. Because strptime does not have a format placeholder for milliseconds, the millisecond value is appended using another format string, Stack (most recent call last):48 — and both of these format strings have been hardcoded into this method. With the change, these strings are defined as class-level attributes which can be overridden at the instance level when desired. The names of the attributes are Stack (most recent call last):49 (for the strptime format string) and Stack (most recent call last):50 (for appending the millisecond value). Đã thay đổi trong phiên bản 3.9: Stack (most recent call last):50 can be FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)9. FormatException (exc_info) ¶(exc_info)¶ Định dạng thông tin ngoại lệ được chỉ định (một bộ ngoại lệ tiêu chuẩn được trả về bởi old_factory = logging.getLogRecordFactory() def record_factory(*args, **kwargs): record = old_factory(*args, **kwargs) record.custom_attribute = 0xdecafbad return record logging.setLogRecordFactory(record_factory)9) dưới dạng chuỗi. Việc thực hiện mặc định này chỉ sử dụng Stack (most recent call last):54. Chuỗi kết quả được trả về. Định dạng (stack_info) ¶(stack_info)¶ Định dạng thông tin ngăn xếp được chỉ định (một chuỗi được trả về bởi Stack (most recent call last):55, nhưng với dòng mới cuối cùng bị xóa) dưới dạng chuỗi. Việc thực hiện mặc định này chỉ trả về giá trị đầu vào. classLogging.bufferingFormatter (linefmt = none) ¶ logging.BufferingFormatter(linefmt=None)¶ Một lớp định dạng cơ sở phù hợp để phân lớp khi bạn muốn định dạng một số hồ sơ. Bạn có thể vượt qua một thể hiện class MyLogger(logging.getLoggerClass()): # ... override behaviour here7 mà bạn muốn sử dụng để định dạng từng dòng (tương ứng với một bản ghi duy nhất). Nếu không được chỉ định, định dạng mặc định (chỉ xuất thông báo sự kiện) được sử dụng làm định dạng dòng. Trả lại một tiêu đề cho một danh sách các hồ sơ. Việc thực hiện cơ sở chỉ trả về chuỗi trống. Bạn sẽ cần ghi đè phương thức này nếu bạn muốn hành vi cụ thể, ví dụ: Để hiển thị số lượng hồ sơ, một tiêu đề hoặc một dòng phân cách. Trả về một chân trang cho một danh sách các hồ sơ. Việc thực hiện cơ sở chỉ trả về chuỗi trống. Bạn sẽ cần ghi đè phương thức này nếu bạn muốn hành vi cụ thể, ví dụ: Để hiển thị số lượng hồ sơ hoặc một dòng phân cách. Định dạng (hồ sơ)(records)¶Trả về văn bản được định dạng cho một danh sách các bản ghi. Việc triển khai cơ sở chỉ trả về chuỗi trống nếu không có hồ sơ; Mặt khác, nó trả về sự kết hợp của tiêu đề, mỗi bản ghi được định dạng với định dạng dòng và chân trang. Bộ lọc đối tượng JoStack (most recent call last):57 có thể được sử dụng bởi Stack (most recent call last):58 và Stack (most recent call last):59 để lọc tinh vi hơn so với các cấp độ được cung cấp. Lớp bộ lọc cơ sở chỉ cho phép các sự kiện dưới một điểm nhất định trong phân cấp logger. Ví dụ: một bộ lọc được khởi tạo với 'A.B' sẽ cho phép các sự kiện được ghi lại bởi loggers 'a.b', 'a.b.c', 'a.b.c.d', 'a.b.d', nhưng không phải 'A.BB', 'B.A. B 'v.v ... Nếu được khởi tạo với chuỗi trống, tất cả các sự kiện được thông qua. classLogging.filter (name = '') ¶ logging.Filter(name='')¶ Trả về một thể hiện của lớp Stack (most recent call last):60. Nếu tên được chỉ định, nó đặt tên cho một logger, cùng với con cái của nó, sẽ có các sự kiện được phép thông qua bộ lọc. Nếu tên là chuỗi trống, cho phép mọi sự kiện. bộ lọc (ghi) ¶(record)¶ Là bản ghi được chỉ định được ghi lại? Trả về Zero cho không, khác không cho có. Nếu được coi là phù hợp, hồ sơ có thể được sửa đổi tại chỗ theo phương pháp này. Lưu ý rằng các bộ lọc được gắn vào các trình xử lý được tư vấn trước khi một sự kiện được phát ra bởi trình xử lý, trong khi các bộ lọc được gắn vào loggers được tư vấn bất cứ khi nào một sự kiện được ghi lại (sử dụng Stack (most recent call last):4, Stack (most recent call last):62, v.v.), trước khi gửi một sự kiện cho Trình xử lý. Điều này có nghĩa là các sự kiện đã được tạo bởi các bộ ghi nhật ký hậu duệ sẽ không được lọc bởi cài đặt bộ lọc logger, trừ khi bộ lọc cũng đã được áp dụng cho các bộ ghi nhật ký con cháu đó. Bạn không thực sự cần phải phân lớp Stack (most recent call last):60: Bạn có thể vượt qua bất kỳ trường hợp nào có phương thức Stack (most recent call last):64 với cùng một ngữ nghĩa. Đã thay đổi trong phiên bản 3.2: Bạn không cần tạo các lớp Stack (most recent call last):60 classes, or use other classes with a Stack (most recent call last):64 method: you can use a function (or other callable) as a filter. The filtering logic will check to see if the filter object has a Stack (most recent call last):64 attribute: if it does, it’s assumed to be a Stack (most recent call last):60 and its 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset2 method is called. Otherwise, it’s assumed to be a callable and called with the record as the single parameter. The returned value should conform to that returned by 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset2. Mặc dù các bộ lọc được sử dụng chủ yếu để lọc các bản ghi dựa trên các tiêu chí tinh vi hơn các cấp, nhưng chúng có thể thấy mọi bản ghi được xử lý bởi trình xử lý hoặc logger mà chúng được đính kèm: điều này có thể hữu ích nếu bạn muốn làm những việc như đếm số lượng Các bản ghi được xử lý bởi một bộ ghi hoặc trình xử lý cụ thể hoặc thêm, thay đổi hoặc xóa các thuộc tính trong class MyLogger(logging.getLoggerClass()): # ... override behaviour here4 đang được xử lý. Rõ ràng thay đổi logrecord cần phải được thực hiện với một số chăm sóc, nhưng nó cho phép tiêm thông tin theo ngữ cảnh vào nhật ký (xem sử dụng các bộ lọc để truyền đạt thông tin theo ngữ cảnh).Using Filters to impart contextual information). Đối tượng logrecordCác phiên bản class MyLogger(logging.getLoggerClass()): # ... override behaviour here4 được tạo tự động bởi Stack (most recent call last):73 mỗi khi có thứ gì đó được ghi lại và có thể được tạo thủ công thông qua Stack (most recent call last):74 (ví dụ: từ một sự kiện ngâm được nhận trên dây). classLogging.Logrecord (tên, cấp độ, tên đường dẫn, lineno, msg, args, exc_info, func = none, sinfo = none) ¶logging.LogRecord(name, level, pathname, lineno, msg, args, exc_info, func=None, sinfo=None)¶ Chứa tất cả các thông tin phù hợp với sự kiện được ghi lại. Thông tin chính được truyền trong MSG và ARGS, được kết hợp bằng cách sử dụng Stack (most recent call last):75 để tạo thuộc tính Stack (most recent call last):76 của bản ghi.Thông số
Trả về thông báo cho phiên bản class MyLogger(logging.getLoggerClass()): # ... override behaviour here4 này sau khi hợp nhất bất kỳ đối số do người dùng cung cấp với thông báo này. Nếu đối số thông báo do người dùng cung cấp vào cuộc gọi ghi nhật ký không phải là một chuỗi, Stack (most recent call last):88 sẽ được gọi trên nó để chuyển đổi nó thành một chuỗi. Điều này cho phép sử dụng các lớp do người dùng xác định làm tin nhắn, có phương thức Stack (most recent call last):89 có thể trả về chuỗi định dạng thực tế được sử dụng. Thay đổi trong phiên bản 3.2: Việc tạo ra một class MyLogger(logging.getLoggerClass()): # ... override behaviour here4 has been made more configurable by providing a factory which is used to create the record. The factory can be set using Stack (most recent call last):91 and Stack (most recent call last):92 (see this for the factory’s signature). Chức năng này có thể được sử dụng để đưa các giá trị của riêng bạn vào class MyLogger(logging.getLoggerClass()): # ... override behaviour here4 tại thời điểm tạo. Bạn có thể sử dụng mẫu sau: old_factory = logging.getLogRecordFactory() def record_factory(*args, **kwargs): record = old_factory(*args, **kwargs) record.custom_attribute = 0xdecafbad return record logging.setLogRecordFactory(record_factory) Với mô hình này, nhiều nhà máy có thể bị xích và miễn là họ không ghi đè lên các thuộc tính khác của nhau hoặc vô tình ghi đè các thuộc tính tiêu chuẩn được liệt kê ở trên, không có bất ngờ nào. Thuộc tính logrecordLogrecord có một số thuộc tính, hầu hết trong số đó có nguồn gốc từ các tham số đến hàm tạo. . Các danh sách bảng sau (theo thứ tự bảng chữ cái) tên thuộc tính, ý nghĩa của chúng và trình giữ chỗ tương ứng theo chuỗi định dạng kiểu %. Nếu bạn đang sử dụng {} -formatting ( Stack (most recent call last):22), bạn có thể sử dụng Stack (most recent call last):95 làm trình giữ chỗ trong chuỗi định dạng. Nếu bạn đang sử dụng $ -formatting ( Stack (most recent call last):23), hãy sử dụng biểu mẫu Stack (most recent call last):97. Trong cả hai trường hợp, tất nhiên, thay thế Stack (most recent call last):98 bằng tên thuộc tính thực tế bạn muốn sử dụng. Trong trường hợp {} -formatting, bạn có thể chỉ định các cờ định dạng bằng cách đặt chúng sau tên thuộc tính, được tách ra khỏi nó bằng dấu hai chấm. Ví dụ: một người giữ chỗ của Stack (most recent call last):99 sẽ định dạng một giá trị mili giây là FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)00 là FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)01. Tham khảo tài liệu Stack (most recent call last):22 để biết chi tiết đầy đủ về các tùy chọn có sẵn cho bạn.
quá trìnhprocessName was added. ID xử lý (nếu có).Tên xử lýadding contextual information to your logging output. Tên quy trình (nếu có).logging.LoggerAdapter(logger, extra)¶tương đối được điều trị Thời gian tính bằng mili giây khi logrecord được tạo, liên quan đến thời gian mô -đun ghi nhật ký được tải.(msg, kwargs)¶Thông tin khung ngăn xếp (nếu có) từ dưới cùng của ngăn xếp trong luồng hiện tại, lên đến và bao gồm khung ngăn xếp của cuộc gọi ghi nhật ký dẫn đến việc tạo bản ghi này. chủ đề ID chủ đề (nếu có).Attribute FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)61 and method FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)62 were added, which delegate to the underlying logger and allow adapters to be nested. Tên ThreadNTên chủ đề (nếu có). Đã thay đổi trong phiên bản 3.1: Quy trình đã được thêm vào. Đối tượng LoggerAd CHƯƠNGFORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)44 Các trường hợp được sử dụng để truyền thông tin theo ngữ cảnh vào các cuộc gọi ghi nhật ký. Để biết ví dụ sử dụng, hãy xem phần về việc thêm thông tin theo ngữ cảnh vào đầu ra ghi nhật ký của bạn. classLogging.loggerAd CHƯƠNG (logger, thêm) ¶getLogger(name=None)¶ Trả về một thể hiện của FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)44 được khởi tạo với một thể hiện cơ bản Stack (most recent call last):73 và một đối tượng giống như dict. Quy trình (MSG, KWARGS) ¶ Sửa đổi thông báo và/hoặc các đối số từ khóa được truyền vào cuộc gọi đăng nhập để chèn thông tin theo ngữ cảnh. Việc triển khai này đưa đối tượng được truyền dưới dạng thêm cho hàm tạo và thêm nó vào KWARGS bằng cách sử dụng khóa ’thêm. Giá trị trả về là một bộ (MSG, KWARGS) có các phiên bản (có thể sửa đổi) của các đối số được truyền vào.getLoggerClass()¶Ngoài các điều trên, FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)44 hỗ trợ các phương pháp sau của Stack (most recent call last):73: Stack (most recent call last):4, Stack (most recent call last):62, FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)51, FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)52, FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)53, FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)54, FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)55, 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset7, ____. Các phương pháp này có cùng chữ ký với các đối tác của chúng trong Stack (most recent call last):73, vì vậy bạn có thể sử dụng hai loại trường hợp thay thế cho nhau. class MyLogger(logging.getLoggerClass()): # ... override behaviour hereĐã thay đổi trong phiên bản 3.6: Thuộc tính FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)61 và Phương thức FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)62 đã được thêm vào, ủy thác cho bộ ghi bên dưới và cho phép các bộ điều hợp được lồng.getLogRecordFactory()¶ Selen an toàn % Mô-đun ghi nhật ký được dự định là an toàn chủ đề mà không cần bất kỳ công việc đặc biệt nào cần được thực hiện bởi các máy khách của mình. Nó đạt được điều này mặc dù sử dụng khóa luồng; Có một khóa để tuần tự hóa quyền truy cập vào mô -đun dữ liệu được chia sẻ và mỗi trình xử lý cũng tạo một khóa để tuần tự hóa quyền truy cập vào I/O cơ bản của nó.This function has been provided, along with Stack (most recent call last):92, to allow developers more control over how the class MyLogger(logging.getLoggerClass()): # ... override behaviour here4 representing a logging event is constructed. Nếu bạn đang thực hiện các trình xử lý tín hiệu không đồng bộ bằng mô -đun FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)63, bạn có thể không thể sử dụng đăng nhập từ bên trong trình xử lý đó. Điều này là do việc triển khai khóa trong mô-đun FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)64 không phải lúc nào cũng được nhập lại và do đó không thể được gọi từ các trình xử lý tín hiệu như vậy. Các chức năng cấp độ mô-đundebug(msg, *args, **kwargs)¶ Ngoài các lớp được mô tả ở trên, có một số hàm cấp mô-đun. Có ba đối số từ khóa trong kwargs được kiểm tra: exc_info, nếu nó không đánh giá là sai, khiến thông tin ngoại lệ được thêm vào thông báo đăng nhập. Nếu một bộ ngoại lệ (ở định dạng được trả về bởi old_factory = logging.getLogRecordFactory() def record_factory(*args, **kwargs): record = old_factory(*args, **kwargs) record.custom_attribute = 0xdecafbad return record logging.setLogRecordFactory(record_factory)9) hoặc một thể hiện ngoại lệ được cung cấp, nó sẽ được sử dụng; Nếu không, old_factory = logging.getLogRecordFactory() def record_factory(*args, **kwargs): record = old_factory(*args, **kwargs) record.custom_attribute = 0xdecafbad return record logging.setLogRecordFactory(record_factory)9 được gọi để có được thông tin ngoại lệ. Đối số từ khóa tùy chọn thứ hai là stack_info, mặc định là class MyLogger(logging.getLoggerClass()): # ... override behaviour here1. Nếu đúng, thông tin ngăn xếp được thêm vào thông báo ghi nhật ký, bao gồm cả cuộc gọi ghi nhật ký thực tế. Lưu ý rằng đây không phải là thông tin ngăn xếp giống như thông tin được hiển thị thông qua việc chỉ định exc_info: cái trước là khung ngăn xếp từ dưới cùng của ngăn xếp cho đến cuộc gọi ghi nhật ký trong luồng hiện tại, trong khi đó là thông tin về các khung ngăn xếp đã không còn nữa, Theo một ngoại lệ, trong khi tìm kiếm người xử lý ngoại lệ. Bạn có thể chỉ định stack_info độc lập với exc_info, ví dụ: Để chỉ ra cách bạn đến một điểm nhất định trong mã của bạn, ngay cả khi không có ngoại lệ nào được nêu ra. Các khung ngăn xếp được in theo dòng tiêu đề có nội dung: Stack (most recent call last): Điều này bắt chước class MyLogger(logging.getLoggerClass()): # ... override behaviour here2 được sử dụng khi hiển thị các khung ngoại lệ. Đối số từ khóa tùy chọn thứ ba là thêm có thể được sử dụng để truyền từ điển được sử dụng để điền vào __dict__ của logrecord được tạo cho sự kiện ghi nhật ký với các thuộc tính do người dùng xác định. Các thuộc tính tùy chỉnh này sau đó có thể được sử dụng như bạn muốn. Ví dụ, chúng có thể được kết hợp vào các tin nhắn đã ghi. Ví dụ: FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d) sẽ in một cái gì đó như: 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset Các phím trong từ điển được truyền thêm không nên đụng độ với các phím được sử dụng bởi hệ thống ghi nhật ký. (Xem tài liệu class MyLogger(logging.getLoggerClass()): # ... override behaviour here7 để biết thêm thông tin về các khóa được sử dụng bởi hệ thống ghi nhật ký.) Nếu bạn chọn sử dụng các thuộc tính này trong các tin nhắn đã đăng nhập, bạn cần thực hiện một số chăm sóc. Ví dụ, trong ví dụ trên, class MyLogger(logging.getLoggerClass()): # ... override behaviour here7 đã được thiết lập với một chuỗi định dạng mong đợi ‘clientip và’ người dùng trong từ điển thuộc tính của logrecord. Nếu những thứ này bị thiếu, thông báo sẽ không được ghi lại vì ngoại lệ định dạng chuỗi sẽ xảy ra. Vì vậy, trong trường hợp này, bạn luôn cần phải vượt qua từ điển thêm với các phím này. Mặc dù điều này có thể gây khó chịu, tính năng này được sử dụng trong các trường hợp chuyên ngành, chẳng hạn như các máy chủ đa luồng trong đó cùng một mã thực thi trong nhiều bối cảnh và các điều kiện thú vị phát sinh phụ thuộc vào bối cảnh này (chẳng hạn như địa chỉ IP của máy khách từ xa và được xác thực Tên người dùng, trong ví dụ trên). Trong những trường hợp như vậy, có khả năng các class MyLogger(logging.getLoggerClass()): # ... override behaviour here7 chuyên dụng sẽ được sử dụng với các ____60 cụ thể. Hàm này (cũng như Stack (most recent call last):62, FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)51, FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)52 và FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)54) sẽ gọi FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)86 nếu logger gốc không có trình xử lý nào được đính kèm. Đã thay đổi trong phiên bản 3.2: Tham số Stack_info đã được thêm vào.The stack_info parameter was added. đăng nhập.info (tin nhắn, *args, ** kwargs) ¶info(msg, *args, **kwargs)¶Ghi lại một thông báo với cấp 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset5 trên bộ ghi căn cứ. Các đối số được giải thích là đối với Stack (most recent call last):4. đăng nhập.warning (tin nhắn, *args, ** kwargs) ¶warning(msg, *args, **kwargs)¶ Ghi lại một thông báo với cấp 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset4 trên bộ ghi căn cứ. Các đối số được giải thích là đối với Stack (most recent call last):4. Ghi chú Có một hàm lỗi thời Stack (most recent call last):7 có chức năng giống hệt với Stack (most recent call last):8. Vì Stack (most recent call last):7 không dùng nữa, vui lòng không sử dụng nó - sử dụng Stack (most recent call last):8 thay thế. logging.error (tin nhắn, *args, ** kwargs) ¶error(msg, *args, **kwargs)¶ Ghi lại một thông báo với cấp FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)1 trên bộ ghi căn cứ. Các đối số được giải thích là đối với Stack (most recent call last):4. Ghi lại một thông báo với cấp FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)3 trên bộ ghi căn cứ. Các đối số được giải thích là đối với Stack (most recent call last):4. logging.exception (tin nhắn, *args, ** kwargs) ¶exception(msg, *args, **kwargs)¶ Ghi lại một thông báo với cấp FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)1 trên bộ ghi căn cứ. Các đối số được giải thích là đối với Stack (most recent call last):4. Thông tin ngoại lệ được thêm vào thông báo ghi nhật ký. Hàm này chỉ nên được gọi từ một người xử lý ngoại lệ. đăng nhập.log (cấp, tin nhắn, *args, ** kwargs) ¶log(level, msg, *args, **kwargs)¶ Ghi lại một thông báo với cấp độ trên logger gốc. Các đối số khác được giải thích là đối với Stack (most recent call last):4. logging.disable (level = quan trọng) ¶disable(level=CRITICAL)¶ Cung cấp một cấp độ ghi đè cho tất cả các trình ghi nhật ký được ưu tiên hơn mức độ riêng của logger. Khi nhu cầu phát sinh để tạm thời ghi âm đầu ra trên toàn bộ ứng dụng, chức năng này có thể hữu ích. Hiệu quả của nó là vô hiệu hóa tất cả các cuộc gọi ghi nhật ký ở mức độ nghiêm trọng trở xuống, để nếu bạn gọi nó với giá trị thông tin, thì tất cả các sự kiện thông tin và gỡ lỗi sẽ bị loại Cấp hiệu quả. Nếu 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset02 được gọi, nó sẽ loại bỏ hiệu quả mức độ ghi đè này, do đó, đầu ra ghi nhật ký lại phụ thuộc vào mức độ hiệu quả của các bộ ghi nhật ký riêng lẻ. Lưu ý rằng nếu bạn đã xác định bất kỳ mức ghi nhật ký tùy chỉnh nào cao hơn FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)3 (điều này không được khuyến nghị), bạn sẽ giành được giá trị mặc định cho tham số cấp, nhưng sẽ phải cung cấp một cách rõ ràng một giá trị phù hợp. Thay đổi trong phiên bản 3.7: Tham số cấp được mặc định là cấp FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)3. See bpo-28524 for more information about this change. Ghi nhật ký.AddlevelName (Level, LevelName) ¶addLevelName(level, levelName)¶ Cấp độ liên kết với mức độ văn bản trong một từ điển nội bộ, được sử dụng để ánh xạ các cấp số đến một biểu diễn văn bản, ví dụ khi một class MyLogger(logging.getLoggerClass()): # ... override behaviour here7 định dạng một thông báo. Chức năng này cũng có thể được sử dụng để xác định cấp độ của riêng bạn. Các ràng buộc duy nhất là tất cả các cấp độ được sử dụng phải được đăng ký bằng cách sử dụng hàm này, các cấp độ phải là số nguyên dương và chúng nên tăng theo thứ tự tăng mức độ nghiêm trọng. Ghi chú Nếu bạn đang nghĩ đến việc xác định các cấp độ của riêng bạn, vui lòng xem phần về các cấp tùy chỉnh.Custom Levels. đăng nhập.getLevelNamesMapping ()getLevelNamesMapping()¶Trả về một ánh xạ từ tên cấp độ đến các cấp ghi nhật ký tương ứng của họ. Ví dụ: chuỗi các bản đồ quan trọng của người Viking đến FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)3. Ánh xạ được trả về được sao chép từ một ánh xạ nội bộ trên mỗi cuộc gọi đến hàm này. Mới trong phiên bản 3.11. đăng nhập.getLevelName (cấp) ¶getLevelName(level)¶Trả về biểu diễn văn bản hoặc số của cấp độ ghi nhật ký. Nếu mức là một trong những cấp độ được xác định trước FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)3, FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)1, 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset4, 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset5 hoặc old_factory = logging.getLogRecordFactory() def record_factory(*args, **kwargs): record = old_factory(*args, **kwargs) record.custom_attribute = 0xdecafbad return record logging.setLogRecordFactory(record_factory)8 thì bạn sẽ nhận được chuỗi tương ứng. Nếu bạn có các cấp độ liên kết với tên bằng cách sử dụng 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset12 thì tên bạn đã liên kết với cấp độ sẽ được trả về. Nếu một giá trị số tương ứng với một trong các mức được xác định được truyền vào, biểu diễn chuỗi tương ứng sẽ được trả về. Tham số cấp độ cũng chấp nhận một biểu diễn chuỗi của cấp độ như ‘thông tin. Trong những trường hợp như vậy, các chức năng này trả về giá trị số tương ứng của cấp độ. Nếu không có giá trị số hoặc chuỗi phù hợp được truyền vào, chuỗi ‘cấp % s % được trả về. Ghi chú Nếu bạn đang nghĩ đến việc xác định các cấp độ của riêng bạn, vui lòng xem phần về các cấp tùy chỉnh.LogRecord attributes), and vice versa. đăng nhập.getLevelNamesMapping ()In Python versions earlier than 3.4, this function could also be passed a text level, and would return the corresponding numeric value of the level. This undocumented behaviour was considered a mistake, and was removed in Python 3.4, but reinstated in 3.4.2 due to retain backward compatibility. Trả về một ánh xạ từ tên cấp độ đến các cấp ghi nhật ký tương ứng của họ. Ví dụ: chuỗi các bản đồ quan trọng của người Viking đếnFORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)3. Ánh xạ được trả về được sao chép từ một ánh xạ nội bộ trên mỗi cuộc gọi đến hàm này.makeLogRecord(attrdict)¶ Mới trong phiên bản 3.11. đăng nhập.getLevelName (cấp) ¶basicConfig(**kwargs)¶Trả về biểu diễn văn bản hoặc số của cấp độ ghi nhật ký. Nếu mức là một trong những cấp độ được xác định trước FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)3, FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)1, 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset4, 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset5 hoặc old_factory = logging.getLogRecordFactory() def record_factory(*args, **kwargs): record = old_factory(*args, **kwargs) record.custom_attribute = 0xdecafbad return record logging.setLogRecordFactory(record_factory)8 thì bạn sẽ nhận được chuỗi tương ứng. Nếu bạn có các cấp độ liên kết với tên bằng cách sử dụng 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset12 thì tên bạn đã liên kết với cấp độ sẽ được trả về. Nếu một giá trị số tương ứng với một trong các mức được xác định được truyền vào, biểu diễn chuỗi tương ứng sẽ được trả về. Ghi chú Nếu bạn đang nghĩ đến việc xác định các cấp độ của riêng bạn, vui lòng xem phần về các cấp tùy chỉnh. đăng nhập.getLevelNamesMapping ()
Thay đổi trong phiên bản 3.2: Đối số kiểu đã được thêm vào.The style argument was added. Thay đổi trong phiên bản 3.3: Đối số xử lý đã được thêm vào. Kiểm tra bổ sung đã được thêm vào để bắt các tình huống trong đó các đối số không tương thích được chỉ định (ví dụ: trình xử lý cùng với luồng hoặc tên tệp hoặc phát trực tiếp cùng với tên tệp).The handlers argument was added. Additional checks were added to catch situations where incompatible arguments are specified (e.g. handlers together with stream or filename, or stream together with filename). Thay đổi trong phiên bản 3.8: Đối số lực đã được thêm vào.The force argument was added. Thay đổi trong phiên bản 3.9: Các đối số mã hóa và lỗi đã được thêm vào.The encoding and errors arguments were added. đăng nhập.shutdown () ¶shutdown()¶Thông báo hệ thống ghi nhật ký để thực hiện tắt máy có trật tự bằng cách xả và đóng tất cả các trình xử lý. Điều này nên được gọi là thoát ứng dụng và không nên sử dụng thêm hệ thống ghi nhật ký sau cuộc gọi này. Khi mô -đun ghi nhật ký được nhập, nó đăng ký chức năng này như một trình xử lý thoát (xem 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset46), vì vậy, thông thường không cần phải làm điều đó theo cách thủ công. Ghi nhật ký.SetLoggerClass (Klass) ¶setLoggerClass(klass)¶ Nói với hệ thống ghi nhật ký để sử dụng lớp klass khi khởi tạo một logger. Lớp nên xác định 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset49. Hàm này thường được gọi trước khi bất kỳ trình ghi nhật ký nào được khởi tạo bởi các ứng dụng cần sử dụng hành vi logger tùy chỉnh. Sau cuộc gọi này, như bất cứ lúc nào, không khởi tạo loggers trực tiếp bằng lớp con: Tiếp tục sử dụng API 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset50 để lấy loggers của bạn. Ghi nhật ký.SetLogRecordFactory (Nhà máy) ¶setLogRecordFactory(factory)¶ Đặt một cuộc gọi có thể gọi được sử dụng để tạo class MyLogger(logging.getLoggerClass()): # ... override behaviour here4.Thông số Nhà máy - Nhà máy có thể gọi được để được sử dụng để khởi tạo bản ghi nhật ký. – The factory callable to be used to instantiate a log record. Mới trong phiên bản 3.2: Chức năng này đã được cung cấp, cùng với Stack (most recent call last):91, to allow developers more control over how the class MyLogger(logging.getLoggerClass()): # ... override behaviour here4 representing a logging event is constructed. Nhà máy có chữ ký sau: 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset54
Thuộc tính cấp độ mô-đunGhi nhật ký.lastresort¶lastResort¶Một người xử lý của Last Resort có sẵn thông qua thuộc tính này. Đây là một bài viết 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset17 cho 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset58 với mức độ 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset4 và được sử dụng để xử lý các sự kiện ghi nhật ký trong trường hợp không có bất kỳ cấu hình ghi nhật ký nào. Kết quả cuối cùng là chỉ in tin nhắn thành 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset58. Điều này thay thế thông báo lỗi trước đó nói rằng không có người xử lý nào có thể được tìm thấy cho logger XYZ. Nếu bạn cần hành vi sớm hơn vì một số lý do, Stack (most recent call last):2 có thể được đặt thành FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)9. Mới trong phiên bản 3.2. Tích hợp với mô -đun cảnh báoHàm 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset63 có thể được sử dụng để tích hợp 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset64 với mô -đun class MyLogger(logging.getLoggerClass()): # ... override behaviour here5. Ghi nhật ký.CaptureWarnings (Chụp) ¶captureWarnings(capture)¶ Hàm này được sử dụng để bật việc bắt giữ các cảnh báo bằng cách đăng nhập và tắt. Nếu chụp là 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset1, các cảnh báo được đưa ra bởi mô -đun class MyLogger(logging.getLoggerClass()): # ... override behaviour here5 sẽ được chuyển hướng đến hệ thống khai thác. Cụ thể, một cảnh báo sẽ được định dạng bằng cách sử dụng 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset68 và chuỗi kết quả được ghi vào một logger có tên 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset69 với mức độ nghiêm trọng là 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset4. Nếu việc bắt giữ là class MyLogger(logging.getLoggerClass()): # ... override behaviour here1, việc chuyển hướng các cảnh báo cho hệ thống khai thác sẽ dừng lại và các cảnh báo sẽ được chuyển hướng đến các điểm đến ban đầu của chúng (tức là những người có hiệu lực trước khi 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset72 được gọi). Xem thêm Mô -đun2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset73 API cấu hình cho mô -đun ghi nhật ký. Mô -đunStack (most recent call last):11 Trình xử lý hữu ích bao gồm với mô -đun ghi nhật ký. PEP 282 - Hệ thống ghi nhật ký - A Logging SystemĐề xuất mô tả tính năng này để đưa vào thư viện tiêu chuẩn Python. Gói đăng nhập Python gốcĐây là nguồn gốc cho gói 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset64. Phiên bản của gói có sẵn từ trang web này phù hợp để sử dụng với Python 1.5.2, 2.1.x và 2.2.x, không bao gồm gói 2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset64 trong thư viện tiêu chuẩn. Thư viện logger trong Python là gì?Logger: Đây là lớp có đối tượng sẽ được sử dụng trực tiếp trong mã ứng dụng để gọi các chức năng. Logrecord: Loggers tự động tạo các đối tượng logrecord có tất cả thông tin liên quan đến sự kiện được ghi lại, giống như tên của logger, hàm, số dòng, thông báo, v.v.the class whose objects will be used in the application code directly to call the functions. LogRecord : Loggers automatically create LogRecord objects that have all the information related to the event being logged, like the name of the logger, the function, the line number, the message, and more.
Làm cách nào để tạo thư viện đăng nhập?Tạo một thư viện logger trong java [đã đóng].. Viết nhật ký vào một tệp trong một đường dẫn được chỉ định .. Thay đổi đường dẫn của tệp nhật ký .. Viết thông tin đăng nhập vào bảng điều khiển hệ thống .. Viết chế độ gỡ lỗi vào tệp nhật ký .. Tạo nhật ký riêng cho cảnh báo, lỗi và thông tin thông tin .. Làm thế nào để bạn sử dụng đăng nhập trong Python?Ghi nhật ký Python: Bắt đầu với những điều cơ bản.. Mô -đun ghi nhật ký mặc định Python..... Mức ghi nhật ký..... Cấu hình ghi nhật ký cơ bản..... Đừng phát minh lại bánh xe..... Sử dụng mô -đun ghi nhật ký tiêu chuẩn Python..... Sử dụng các cấp chính xác khi đăng nhập..... Bao gồm một dấu thời gian cho mỗi mục nhật ký..... Áp dụng định dạng ISO-8601 cho dấu thời gian .. Làm cách nào để đăng nhập dữ liệu vào tệp Python?Cách bắt đầu ghi nhật ký tin nhắn trong Python.. Nhập mô -đun ghi nhật ký .. Định cấu hình logger bằng phương thức basicConfig ()..... Chỉ định tệp mà tin nhắn nhật ký được gửi .. Xác định mức độ nghiêm trọng của người Viking của các tin nhắn nhật ký .. Định dạng các thông báo nhật ký .. Nối hoặc ghi đè các tin nhắn nhật ký trước đó trong tệp .. |