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


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.

  • Loggers hiển thị giao diện mà mã ứng dụng sử dụng trực tiếp.

  • Trình xử lý gửi các bản ghi nhật ký (được tạo bởi loggers) đến đích thích hợp.

  • Các bộ lọc cung cấp một cơ sở hạt mịn hơn để xác định bản ghi nhật ký nào vào đầu ra.

  • Formatters Chỉ định bố cục của các bản ghi nhật ký trong đầu ra cuối cùng.

Đối tượng logger

Loggers 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 logging.getLogger(name). Nhiều cuộc gọi đến

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

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 reset
0 đượ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 reset
1.

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 reset
1. 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 reset
3 (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 reset
4.

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 reset
5. Tuy nhiên, lưu ý rằng các mức được lưu trữ bên trong như các số nguyên và các phương pháp như ví dụ:
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
6 và
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
7 sẽ trả về/mong đợi được thông qua các số nguyên.The level parameter now accepts a string representation of the level such as ‘INFO’ as an alternative to the integer constants such as
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
5. 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 reset
6 and
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
7 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 reset
8 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 reset
6.

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 reset
3 đã đượ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 reset
3 đượ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 here
1. 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 here
2 đượ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 here
3. 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 here
4 đượ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 here
5.

Đố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 here
4 đượ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 here
7 đã đượ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 here
4. 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 here
7 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 reset
5 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 reset
4 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 reset
1 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 reset
1.

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 reset
2.

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 here
4 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 reset
1 Nếu tìm thấy một người xử lý, khác
class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
1. 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.

Mức độ

Giá trị số

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

50

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

40

2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
4

30

2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
5

20

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

10

2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
3

0

Đố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.

classLogging.Handler¶ __init __ (level = notset) ¶logging.Handler__init__(level=NOTSET)

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 logging.getLogger(name)6.

phóng thích()¶()

Phát hành khóa luồng thu được với logging.getLogger(name)8.

setlevel (cấp)(level)

Đặ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 reset
3 (đ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 reset
5.The level parameter now accepts a string representation of the level such as ‘INFO’ as an alternative to the integer constants such as
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
5.

SetFormatter (FMT) ¶(fmt)

Đặt

class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
7 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 reset
1 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 here
1, 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 reset
1, 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:

  • API cấu hình ghi nhật ký có được khóa cấp độ mô-đun, và sau đó khóa cấp độ xử lý riêng lẻ khi các trình xử lý được cấu hình.

  • Nhiều API ghi nhật ký khóa khóa mô-đun. Nếu API như vậy được gọi từ phương thức này, nó có thể gây bế tắc nếu lệnh gọi cấu hình được thực hiện trên một luồng khác, bởi vì luồng đó sẽ cố gắng thu Khóa cấp mô-đun sau khóa cấp xử lý (vì trong phương thức này, khóa cấp độ xử lý đã được thu thập).

Để 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ạng

Các đối tượng

class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
7 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 here
4 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 here
7 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 here
4 - 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 here
4 đượ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 here
7. 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. Ví dụ:
Stack (most recent call last):
29.The validate parameter was added. Incorrect or mismatched style and fmt will raise a
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 here
7 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 here
7.

Đã 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 trong đó phần trước khi dấu phẩy được xử lý bởi chuỗi định dạng Strptime (
Stack (most recent call last):
47) và phần sau khi dấu phẩy là giá trị lớn. Do Strptime không có trình giữ chỗ định dạng cho mili giây, giá trị mili giây được nối thêm bằng cách sử dụng chuỗi định dạng khác,
Stack (most recent call last):
48 - và cả hai chuỗi định dạng này đã được mã hóa thành phương pháp này. Với sự thay đổi, các chuỗi này được định nghĩa là các thuộc tính cấp lớp có thể được ghi đè ở cấp độ thể hiện khi muốn. Tên của các thuộc tính là
Stack (most recent call last):
49 (đối với chuỗi định dạng Strptime) và
Stack (most recent call last):
50 (để nối thêm giá trị mili giây).Previously, the default format was hard-coded as in this example:
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 có thể là
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.The
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 here
7 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 Jo

Stack (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 chuyên dụng hoặc sử dụng các lớp khác bằng phương thức
Stack (most recent call last):
64: bạn có thể sử dụng hàm (hoặc có thể gọi khác) làm bộ lọc. Logic lọc sẽ kiểm tra xem đối tượng bộ lọc có thuộc tính
Stack (most recent call last):
64 không: Nếu có, nó được coi là
Stack (most recent call last):
60 và phương thức
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
2 của nó được gọi. Mặt khác, nó được coi là một người có thể gọi và được gọi với bản ghi là tham số đơn. Giá trị trả về sẽ phù hợp với giá trị được trả về bởi
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
2.You don’t need to create specialized
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 reset
2 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 reset
2.

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 here
4 đ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 logrecord

Các phiên bản

class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
4 đượ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ố
  • Tên (STR) - Tên của logger được sử dụng để ghi lại sự kiện được biểu thị bằng

    class MyLogger(logging.getLoggerClass()):
        # ... override behaviour here
    
    4 này. Lưu ý rằng tên logger trong
    class MyLogger(logging.getLoggerClass()):
        # ... override behaviour here
    
    4 sẽ luôn có giá trị này, mặc dù nó có thể được phát ra bởi một trình xử lý được gắn vào một logger (tổ tiên) khác.
    (str) – The name of the logger used to log the event represented by this
    class MyLogger(logging.getLoggerClass()):
        # ... override behaviour here
    
    4. Note that the logger name in the
    class MyLogger(logging.getLoggerClass()):
        # ... override behaviour here
    
    4 will always have this value, even though it may be emitted by a handler attached to a different (ancestor) logger.

  • Cấp độ (int) - Mức số của sự kiện khai thác (chẳng hạn như

    Stack (most recent call last):
    
    79 cho
    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,
    Stack (most recent call last):
    
    81 cho
    2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
    
    5, v.v.). Lưu ý rằng điều này được chuyển đổi thành hai thuộc tính của logrecord:
    Stack (most recent call last):
    
    83 cho giá trị số và
    Stack (most recent call last):
    
    84 cho tên cấp tương ứng.
    (int) – The numeric level of the logging event (such as
    Stack (most recent call last):
    
    79 for
    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,
    Stack (most recent call last):
    
    81 for
    2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
    
    5, etc). Note that this is converted to two attributes of the LogRecord:
    Stack (most recent call last):
    
    83 for the numeric value and
    Stack (most recent call last):
    
    84 for the corresponding level name.

  • PathName (STR) - Đường dẫn chuỗi đầy đủ của tệp nguồn nơi thực hiện cuộc gọi ghi nhật ký. (str) – The full string path of the source file where the logging call was made.

  • Lineno (int) - Số dòng trong tệp nguồn nơi thực hiện cuộc gọi ghi nhật ký. (int) – The line number in the source file where the logging call was made.

  • MSG (STR)-Thông báo mô tả sự kiện, có thể là chuỗi %-format với trình giữ chỗ cho dữ liệu biến. (str) – The event description message, which can be a %-format string with placeholders for variable data.

  • args (tuple | dict [str, any]) - dữ liệu biến để hợp nhất vào đối số MSG để có được mô tả sự kiện. (tuple | dict[str, Any]) – Variable data to merge into the msg argument to obtain the event description.

  • exc_info (tuple [type [baseexception], baseexception, type.traceBackType] | none) - một ngoại lệ với thông tin ngoại lệ hiện tại, đượ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
    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 nếu không có thông tin ngoại lệ nào có sẵn.
    (tuple[type[BaseException], BaseException, types.TracebackType] | None) – An exception tuple with the current exception information, as returned by
    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, or
    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 if no exception information is available.

  • func (str | none) - tên của hàm hoặc phương thức mà từ đó cuộc gọi đăng nhập được gọi. (str | None) – The name of the function or method from which the logging call was invoked.

  • Sinfo (str | none) - một chuỗi văn bản đại diện cho thông tin ngăn xếp từ cơ sở của ngăn xếp trong luồng hiện tại, cho đến cuộc gọi ghi nhật ký. (str | None) – A text string representing stack information from the base of the stack in the current thread, up to the logging call.

getMessage ()()

Trả về thông báo cho phiên bản

class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
4 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 here
4 đã được cấu hình hơn bằng cách cung cấp một nhà máy được sử dụng để tạo hồ sơ. Nhà máy có thể được đặt bằng cách sử dụng
Stack (most recent call last):
91 và
Stack (most recent call last):
92 (xem điều này cho chữ ký của nhà máy).The creation of a
class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
4 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 here
4 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 logrecord

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

Tên thuộc tính

Định dạng

Sự mô tả

Args

Bạn không cần phải tự định dạng điều này.

Tuple của các đối số được hợp nhất thà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)
03 để tạo ra
Stack (most recent call last):
76 hoặc một dict có giá trị được sử dụng cho sự hợp nhất (khi chỉ có một đối số và đó là một từ điển).

Asctime

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

Thời gian có thể đọc được của con người khi

class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
4 được tạo ra. Theo mặc định, đây là hình thức ‘2003-07-08 16: 49: 45,896 (các số sau dấu phẩy là phần nghìn giây của thời gian).

tạ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)
07

Thời gian khi

class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
4 được tạo ra (như được trả lại bở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)
09).

exc_info

Bạn không cần phải tự định dạng điều này.

Tuple của các đối số được hợp nhất thà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)
03 để tạo ra
Stack (most recent call last):
76 hoặc một dict có giá trị được sử dụng cho sự hợp nhất (khi chỉ có một đối số và đó là một từ điển).

Asctime

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

Thời gian có thể đọc được của con người khi

class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
4 được tạo ra. Theo mặc định, đây là hình thức ‘2003-07-08 16: 49: 45,896 (các số sau dấu phẩy là phần nghìn giây của thời gian).

tạ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)
14

Thời gian khi

class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
4 được tạo ra (như được trả lại bở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)
09).

Ngoại lệ tuple (à la

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)
10) hoặc, nếu không có ngoại lệ nào xảy ra,
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.

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

Tên tệp

Tên tệp 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)
13.

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

funcname

Tên của chức năng chứa cuộc gọi ghi nhật ký.

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

Tên cấp độ

thông điệp

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

Thông báo đã ghi, được tính toán 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)
29. Điều này được đặt khi
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)
30 được gọi.

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

Mô -đun (phần tê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)
32).

MSECS

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

Phần giây của thời gian khi

class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
4 được tạo ra.

MSG

Bạn không cần phải tự định dạng điều này.

Chuỗi định dạng được truyền trong cuộc gọi ghi nhật ký ban đầu. Được hợp nhất vớ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)
35 để sản xuất
Stack (most recent call last):
76 hoặc một đối tượng tùy ý (xem bằng cách sử dụng các đối tượng tùy ý làm thông điệp).Using arbitrary objects as messages).

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

Tên của logger được sử dụng để đăng nhập cuộc gọi.

Tên đường dẫ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)
38

Tên pathn tên đầy đủ của tệp nguồn trong đó cuộc gọi ghi nhật ký được phát hành (nếu có).

quá trì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)
39

ID xử lý (nếu có).

Tên xử 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)
40

Tên quy trình (nếu có).

tương đối được điều trị

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

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.

stack_info

Bạn không cần phải tự định dạng điều này.

Chuỗi định dạng được truyền trong cuộc gọi ghi nhật ký ban đầu. Được hợp nhất vớ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)
35 để sản xuất
Stack (most recent call last):
76 hoặc một đối tượng tùy ý (xem bằng cách sử dụng các đối tượng tùy ý làm thông điệp).

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

Tên của logger được sử dụng để đăng nhập cuộc gọi.

Tên đường dẫ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)
43

Tên pathn tên đầy đủ của tệp nguồn trong đó cuộc gọi ghi nhật ký được phát hành (nếu có).

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 ThreadN

Tê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ƯƠNG

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á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 reset
7, ____. 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 here
4 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 here
1. 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 here
2 đượ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 here
7 để 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 here
7 đã đượ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 here
7 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 reset
5 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 reset
4 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.

logging.critical (tin nhắn, *args, ** kwargs) ¶critical(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 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 reset
02 đượ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. Xem BPO-28524 để biết thêm thông tin về sự thay đổi này.The level parameter was defaulted to level
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 here
7 đị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 reset
4,
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
5 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 reset
12 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 đế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.
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 reset
4,
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
5 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 reset
12 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 ()

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

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 reset
4,
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
5 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 reset
12 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 độ.mode. Defaults to

2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
28.

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

Các cấp là số nguyên nội bộ (vì chúng cần được so sánh trong logic ghi nhật ký). Hàm này được sử dụng để chuyển đổi giữa mức số nguyên và tên cấp được hiển thị theo đầu ra nhật ký được định dạng bằng trình xác định định dạng

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)
15 (xem các thuộc tính logrecord) và ngược lại.

Đã thay đổi trong phiên bản 3.4: Trong các phiên bản Python sớm hơn 3,4, hàm này cũng có thể được truyền một cấp văn bản và sẽ trả về giá trị số tương ứng của cấp độ. Hành vi không có giấy tờ này được coi là một sai lầm và đã bị xóa trong Python 3.4, nhưng được phục hồi trong 3.4.2 do giữ lại khả năng tương thích ngược.

đăng nhập.Makelogrecord (attrdict) ¶

Tạo và trả về một thể hiện

class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
4 mới có các thuộc tính được xác định bởi attrdict. Hàm này rất hữu ích cho việc lấy từ điển thuộc tính
class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
4 ngâm, được gửi qua một ổ cắm và tái lập nó như một ví dụ
class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
4 ở đầu nhận.

log.basicconfig (** kwargs) ¶printf-style,

Stack (most recent call last):
22 or
Stack (most recent call last):
23 respectively. Defaults to
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
33.

Do cấu hình cơ bản cho hệ thống ghi nhật ký bằng cách tạo

2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
17 với
class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
7 mặc định và thêm nó vào logger gốc. Các hàm
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 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ẽ tự động 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 không có trình xử lý nào được xác định cho logger gốc.

Hàm này không làm gì nếu logger gốc đã có trình xử lý được cấu hình, trừ khi lực đối số từ khóa được đặt thành

2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
1.level.

Hàm này nên được gọi từ luồng chính trước khi các luồng khác được bắt đầu. Trong các phiên bản của Python trước 2.7.1 và 3.2, nếu hàm này được gọi từ nhiều luồng, có thể (trong những trường hợp hiếm hoi) rằng một trình xử lý sẽ được thêm vào bộ ghi gốc nhiều lần, dẫn đến kết quả bất ngờ như tin nhắn được nhân đôi trong nhật ký.

Các đối số từ khóa sau được hỗ trợ.

người xử lý

Nếu được chỉ định, đây phải là một trình xử lý đã được tạo ra để thêm vào logger gốc. Bất kỳ trình xử lý nào mà don lồng đã có một bộ định dạng sẽ được gán cho định dạng mặc định được tạo trong hàm này. Lưu ý rằng đối số này không tương thích với tên tệp hoặc luồng - nếu cả hai có mặt,

Stack (most recent call last):
28 được nêu ra.

lực lượng

Nếu đối số từ khóa này được chỉ định là true, bất kỳ trình xử lý hiện có nào được gắn vào logger gốc sẽ bị xóa và đóng, trước khi thực hiện cấu hình như được chỉ định bởi các đối số khác.

mã hóa

Nếu đối số từ khóa này được chỉ định cùng với tên tệp, giá trị của nó được sử dụng khi

2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
26 được tạo và do đó được sử dụng khi mở tệp đầu ra.

lỗi

Nếu đối số từ khóa này được chỉ định cùng với tên tệp, giá trị của nó được sử dụng khi

2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
26 được tạo và do đó được sử dụng khi mở tệp đầu ra. Nếu không được chỉ định, giá trị ‘Backslashreplace, được sử dụng. Lưu ý rằng nếu
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 được chỉ định, nó sẽ được truyền như vậy cho
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
45, điều đó có nghĩa là nó sẽ được đối xử giống như vượt qua ‘lỗi.

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 reset
46), 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 logging.getLogger(name)3 sao cho chỉ cần một đối số tên và logging.getLogger(name)3 nên gọi

2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
49. 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 reset
50 để 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 here
4.

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, để cho phép các nhà phát triển kiểm soát nhiều hơn về cách xây dựng sự kiện ghi nhật ký.This function has been provided, along with
Stack (most recent call last):
91, to allow developers more control over how the
class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
4 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 reset
54

Tên

Tên logger.

mức độ

Mức ghi nhật ký (số).

fn

Tên đường dẫn đầy đủ của tệp nơi thực hiện cuộc gọi ghi nhật ký.

LNO

Số dòng trong tệp nơi thực hiện cuộc gọi ghi nhật ký.

MSG

Thông báo ghi nhật ký.

Args

Các đối số cho thông báo ghi nhật ký.

exc_info

Một bộ ngoại lệ, hoặ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)
9.

func

Tên của hàm hoặc phương thức gọi cuộc gọi ghi nhật ký.

Sinfo

Một dấu vết ngăn xếp như được cung cấp bởi

Stack (most recent call last):
55, hiển thị hệ thống phân cấp cuộc gọi.

kwargs

Đối số từ khóa bổ sung.

Thuộc tính cấp độ mô-đun

Ghi 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 reset
17 cho
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
58 với mức độ
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
4 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 reset
58. Đ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áo

Hàm

2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
63 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 reset
64 với mô -đun
class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
5.

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 reset
1, các cảnh báo được đưa ra bởi mô -đun
class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
5 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 reset
68 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 reset
69 với mức độ nghiêm trọng là
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
4.

Nếu việc bắt giữ là

class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
1, 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 reset
72 được gọi).

Xem thêm

Mô -đun
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
73

API cấu hình cho mô -đun ghi nhật ký.

Mô -đun
Stack (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 reset
64. 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 reset
64 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 ..