2012-06-25 14 views
12

ZODBを使用してデータベースを作成した後、別のPCにコピー貼り付けたというエラーメッセージ "ロガーZODB.FileStorageのハンドラが見つかりませんでした"コピーされたZODBデータベース

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

注:プログラムが壊れていない、それは誤りだかのように、それはちょうど赤で声明をプリントアウトし、私はこのデータベースにログインするたびに(コピー1)が、私はこのエラーを取得する私はなぜだろうか。

この迷惑なメッセージは何ですか、なぜ私がログインするたびに発生しますか?

更新番号(1):pythonロギングシステムとは何ですか?アプリケーションでそれを設定する必要があるのはなぜですか?

注:

  1. 私だけZODBを使用しています。

  2. マイOSはWindows XP sp2です。

+3

可能重複します(http:/ /stackoverflow.com/questions/345991/python-no-handlers-could-be-found-for-logger-opengl-error) –

+1

これはZODBの問題ではありません。あなたのアプリケーションでは、Pythonロギングシステムを設定していません。 –

+0

私はその質問を削除するように依頼しました。この投稿に関連する質問を更新する予定です.thanks jdi –

答えて

27

短い答え

あなたはは、あなたのアプリケーションのためにそれを設定するは必要ありません。そのようにすると便利です。

ロング回答

loggingモジュールは、任意のPythonコードが出力に依存しない、それを使用して、実際のアプリケーションにある方法で情報を記録することを可能にするPythonモジュールです。任意の深度のライブラリは、ログモジュール、ログ情報、警告、エラーなどをインポートすることができ、ユーザがどのようにそれらを受け取るかを正確に知る必要はありません。

あなたが見ているのは、自分のアプリケーションにハンドラがないことです。 ZODBは明らかに情報を記録していますが、ハンドラを定義していないため、このログ情報はエーテルに気化しています。あなたには、いくつかのログ情報を見たい場合は、あなたが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) 

この例では、アプリの名前のロガーを作成します。次に、2つのタイプのハンドラを作成します。 1つはDEBUGレベルのログをファイルに書き込むためのファイルハンドラです。 2番目は、コンソールにエラーを送信するストリームハンドラです。

あなたのコンソールに行くより詳細な情報を見たい場合は、INFOにログレベルを変更することができますに:

ch = logging.StreamHandler() 
ch.setLevel(logging.INFO) 

はまた、「フォーマッタ」の概念に注目してください。異なるハンドラーに異なるログ形式を設定できます。

少なくともあなたのアプリケーションでストリームハンドラを作成すると、ハンドラが定義されていないことを警告しなくなります。

python 2.7+の場合、loggingモジュールにはNullHandlerが含まれています。これは、エンド・ユーザーがロギング・ハンドラーなしで(ライブラリーを使用して)ライブラリーを使用しているときに、エラーをサイレントにするデフォルト・ハンドラーであるように、ライブラリー(データベース・ライブラリーなど)で使用されることを意図しています。したがって、ロギングを気にせずに単純に静かにしたい場合は、自分のコードにNullHandlerを追加することができます。実際にログを設定することをお勧めしますが、これはちょうど別のオプションです:[Pythonの - いいえ、ハンドラがロガー「OpenGL.error」のために見つかりませんでした]の

Adding NullHandler to the logger

import logging 
logging.getLogger('spam_application').addHandler(logging.NullHandler()) 
+1

+1からbin/snapshotbackupを実行すると、このエラーが発生し、 'NullHandler'を説明します。 –

関連する問題