2012-06-25 13 views
12

Tôi đã tạo cơ sở dữ liệu bằng cách sử dụng ZODB, sau đó sao chép nó sang máy tính khác. Tôi tự hỏi tại sao mỗi khi tôi đăng nhập vào cơ sở dữ liệu này (sao chép một) tôi nhận được lỗi này:Thông báo lỗi "không có trình xử lý nào có thể được tìm thấy cho trình ghi nhật ký ZODB.FileStorage" trên cơ sở dữ liệu ZODB đã sao chép

no handlers could be found for logger (ZODB.FileStorage) 

Lưu ý: chương trình không bị phá vỡ, nó chỉ in ra báo cáo kết quả màu đỏ như thể đó là một lỗi.

Thông báo gây phiền nhiễu này là gì và tại sao nó xảy ra mỗi lần tôi đăng nhập?

Cập nhật không (1): Hệ thống ghi nhật ký python là gì? Tại sao tôi cần phải cấu hình nó trong ứng dụng của tôi?

Lưu ý:

  1. tôi chỉ sử dụng ZODB.

  2. Hệ điều hành của tôi là Windows XP sp2.

+3

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

+1

Đâ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. –

+0

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 –

Trả lời

27

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()) 
+1

+1 để giải thích 'NullHandler'. –

Các vấn đề liên quan