2016-11-09 15 views
0

私はPythonを始めました。私はLoggerを使うのに苦労しています。私は2つのpythonファイル:app.pyとliba.pyを持っています。私はapp.pyでロギングをセットアップし、それをliba.py(および他のライブラリ)に使用したいと思います。良いアイデアはありますか?または参考文献を共有することはできますか?Pythonマルチpythonファイルでグローバルロガー設定を設定するにはどうすればよいですか?

ファイル構造

entry.py 
lib/liba.py 

app.py

#! /usr/bin/env python3 

import logging 
logger = logging.getLogger(__name__) 

from lib import liba 

handler = logging.FileHandler('/tmp/app.log', 'a+') 
logger.addHandler(handler) 
logger.warn('sample') 

liba.out() 

のlib/liba.py

#! /usr/bin/env python3 

import logging 
logger = logging.getLogger(__name__) 

def out(): 
    logger.warn('liba') 

実行パイソン

$ python3 app.py 
liba 

app.pyはログファイルにログを出力します。 liba.pyはログをファイルに出力しません。同じファイルにログを保存したい

答えて

0

とても好きですか:

app.py

#! /usr/bin/env python3 

import logging 
logger = logging.getLogger() 
handler = logging.FileHandler('/tmp/app.log', 'a+') 
logger.addHandler(handler) 

logger.warn('sample') 

from lib import liba 

liba.out() 

のlib/liba.py

#! /usr/bin/env python3 

import logging  
def out(): 
    logging.warn('liba') 

あなたはハンドラを設定する場合を除き、あなたは、ロギングをインスタンス化する必要はありませんこれはメインスクリプトでのみ行います。すべてのロギングは、具体的な名前がlogging.getLogger()でインスタンス化するときに得られるものであるルートロガーに移動します。私はあなたがそれが動作するためにあなたのすべてのモジュールに渡って名前をマッチさせる必要がないので、この方法で使用します。モジュールでは、logging.warn('blabla')を使用してログメッセージを送信するだけです。さらに、logging.warnの呼び出しが行われる前にすべてのハンドラーを定義する必要があります。それ以外の場合は、デフォルトのハンドラーが代わりに使用されます。

関連する問題