Tôi đã cố gắng tạo thuộc tính tùy chỉnh để ghi nhật ký (tên lớp của người gọi, tên mô-đun, v.v.) và bị kẹt với một ngoại lệ lạ cho tôi biết rằng cá thể LogRecord được tạo trong tiến trình không có các thuộc tính cần thiết. Sau một chút thử nghiệm tôi đã kết thúc với điều này:Mô-đun đăng nhập Python: logger tùy chỉnh
import logging
class MyLogger(logging.getLoggerClass()):
value = None
logging.setLoggerClass(MyLogger)
loggers = [
logging.getLogger(),
logging.getLogger(""),
logging.getLogger("Name")
]
for logger in loggers:
print(isinstance(logger, MyLogger), hasattr(logger, "value"))
này mảnh dường như đúng đắn về sản lượng mã:
False False
False False
True True
Lỗi hoặc tính năng?
Cảm ơn bạn đã bình luận, tôi đã chỉnh sửa câu hỏi. Nhưng tôi nghĩ rằng hành vi này không phải là điều mà người ta mong đợi sẽ xảy ra. – Pastafarianist
Tại sao nó không phải là những gì bạn mong đợi sẽ xảy ra? Đó là * chính xác * những gì tài liệu nói sẽ xảy ra khi không có tên được chỉ định. –
Mặc dù đây là những gì tài liệu nói, nó phản trực giác. Thiết lập một lớp cho logger, tôi mong đợi các logger _all_ có lớp đó, bao gồm cả lớp gốc và loại bỏ các lớp đã khởi tạo. – Pastafarianist