ngắn trả lời
Bạn không cần để cấu hình nó cho các ứng dụng của bạn. Nó hữu ích để làm như vậy.
dài trả lời
Module logging là một mô-đun python cho phép bất kỳ mã python để đăng nhập thông tin theo một cách mà là đầu ra-agnostic vào ứng dụng thực tế sử dụng nó. Thư viện ở bất kỳ độ sâu nào cũng có thể nhập mô-đun ghi nhật ký, thông tin nhật ký, cảnh báo, lỗi, v.v. và không phải biết chính xác người dùng sẽ nhận chúng như thế nào.
Những gì bạn thấy là liên quan đến việc thiếu trình xử lý trong ứng dụng của riêng bạn. ZODB rõ ràng là đăng nhập thông tin, nhưng vì bạn chưa xác định một trình xử lý, thông tin ghi nhật ký này chỉ bốc hơi vào ether. Nó thông báo cho bạn rằng nếu bạn muốn nhìn thấy một số thông tin đăng nhập, bạn cần xác định một handler
Từ Logging Cookbook:
import logging
# create logger with 'spam_application'
logger = logging.getLogger('spam_application')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(fh)
logger.addHandler(ch)
Ví dụ này tạo một logger với một tên cho ứng dụng của bạn. Sau đó nó tạo ra hai loại trình xử lý. Một là một trình xử lý tệp để viết các bản ghi mức DEBUG vào một tệp. Thứ hai là trình xử lý luồng sẽ gửi lỗi tới bảng điều khiển của bạn.
Nếu bạn muốn xem thêm thông tin tiết sẽ điều khiển của bạn, bạn có thể thay đổi mức độ đăng nhập để INFO:
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
Cũng cần lưu ý khái niệm "và định dạng". Bạn có thể đặt các định dạng nhật ký khác nhau cho các trình xử lý khác nhau.
Nếu bạn ít nhất tạo trình xử lý luồng trong ứng dụng của mình thì trình xử lý sẽ không còn cảnh báo bạn rằng trình xử lý chưa được xác định.
Đối với python 2.7+, mô-đun logging
bao gồm NullHandler
.Nó được dự định sẽ được sử dụng trong một thư viện (như thư viện cơ sở dữ liệu của bạn) để trở thành trình xử lý mặc định làm tắt các lỗi khi người dùng cuối đang sử dụng thư viện mà không cần bất kỳ trình xử lý ghi nào (như bạn đang làm). Vì vậy, nếu bạn không quan tâm đến việc đăng nhập và chỉ đơn giản là muốn tắt tiếng, bạn có thể thêm NullHandler
vào mã của riêng bạn. Đó là khuyến cáo để thực sự thiết lập việc ghi chép, nhưng điều này chỉ là một lựa chọn:
Adding NullHandler to the logger
import logging
logging.getLogger('spam_application').addHandler(logging.NullHandler())
thể trùng lặp của [Python - Không xử lý có thể được tìm thấy cho logger "OpenGL.error"] (http://stackoverflow.com/questions/345991/python-no-handlers-could-be-found-for-logger-opengl-error) –
Đây không phải là vấn đề ZODB; bạn chưa cấu hình hệ thống đăng nhập python trong ứng dụng của mình. –
Tôi đã yêu cầu xóa câu hỏi đó. Tôi sẽ cập nhật câu hỏi liên quan đến bài đăng này .thanks jdi –