2017-06-04 2 views
0

どのようにモジュールのログインレベルを選択しますか?私は私が働いていた様々なファイルとアプリケーション、 は(ロギングモジュールを理解し、印刷を落としていモジュール内の各ファイルの異なるロギングレベルを設定するにはどうすればよいですか?

)ログと 私の目標は、柔軟性コード(モジュール)のdiferents部からログレベルを切り替える である私はそれを行いますメインエントリポイント関数から:ここで

は私が持っているものです。

APP/PartA/Script1.py 
APP/PartA/Script2.py 
APP/Other/Tools.py 
APP/main.py 

まずモジュール:

#/PartA/Script1.py 
import logging 
from PartA.Script2 import * 

logger = logging.getLogger(__name__) 
# Logger Always on debug level: 
logger.setLevel(logging.DEBUG) 

handler1 = logging.StreamHandler() 
handler1.setFormatter(logging.Formatter('\n%(levelname)s %(name)s')) 

logger.addHandler(handler1) 

def add_ten(n) 
    ten_added = add_five(n) + 5 
    return ten_added 

第二のモジュール:

#/PartA/Script2.py 
import logging 

logger = logging.getLogger(__name__) 
# Logger Always on debug level: 
logger.setLevel(logging.DEBUG) 

handler2 = logging.StreamHandler() 
handler2.setFormatter(logging.Formatter('\n%(levelname)s %(name)s %(funcName)s %(lineno)s \n%(message)s')) 

logger.addHandler(handler2) 

def add_five(n): 
    return n + 5 

メインエントリポイント:

#main.py 
import logging 
from PartA.Script1 import * 
from PartA.Script2 import * 



logger = logging.getLogger(__name__) 
# Logger is always on debug mode.. 
logger.setLevel(logging.DEBUG) 

# Mainhandler: 
handler = logging.StreamHandler() 

handler.setLevel(logging.INFO) 

# Here i control the logs levels from the other modules: 
handler2.setLevel(logging.DEBUG) 
handler1.setLevel(logging.ERROR) 

厥、私はちょうどメイン関数でハンドラのsetlevelsを変更する必要がありますが、私はそれが非常にニシキヘビあると思ういけないよう、作業すべてのロガーをDEBUGレベルで設定しなければならないのは、常に奇妙に見える 新しい.pyファイルに対してこれを行うための非常に反復的なコード..

答えて

1

ロギングハンドラを設定しないことがベストプラクティスですあなたのモジュール内の問題は、単にNullHandlerを使用してください。ハンドラの設定は、モジュールを使用してアプリケーション内で実行されます。

モジュール内では、以下のように十分なはずです。

import logging 

logger = logging.getLogger(__name__) 
+0

別のモジュールで同じロガー名を使用できません。最後にそれを手に入れよう!ありがとうございました!私がmain.pyで1つのハンドラしか使用していない場合は、常にデバッグレベルにする必要があります。次にレベルを変更したり、ハンドラを変更したりします。 – JMcgreen

関連する問題