2016-07-20 7 views
0

私は多くの異なるモジュールからなるアプリケーションを持っていますが、すべてが依然として単一のアプリケーションの一部です。どのようにしてロガーを適切に共有すれば、すべてが同じファイルに書き込まれるのですか?私はロガーを回す必要がありますか?私はこれをする必要はありません。大きなアプリケーションでロガーを共有するにはどうすればよいですか?

例プロジェクトのレイアウト:ある

logger = logging.getLogger() 
logger.setLevel(logging.DEBUG) 
file_log = logging.FileHandler('logs/%s.log' % (file_name), 'a', encoding='UTF-8') 
file_log.setLevel(file_level) 
formatter = logging.Formatter('%(asctime)s - %(levelname)-8s - %(name)-12s - %(message)s') 
file_log.setFormatter(formatter) 
logger.addHandler(file_log) 

が続いfunctions_group1loggerを使用することができ、functions_group1functions_group3:私はそうのようなmain_application.pyloggerを定義できるようにしたい

/ 
    __init__.py 
    main_application.py 
    functions_group1.py 
    functions_group2.py 
    functions_group3.py 

main_applicationにインポートしました:

import functions_group1 
import functions_group2 
import functions_group3 

これらの各ファイル(同様の機能によってグループ化)機能のリストだけを持っている

functions_group1

def function1_dothing(): 
    # Want to log in here! 
    return ... 

def function1_dothing2(): 
    # Want to log in here! 
    return ... 

def function1_dothing3(): 
    # Want to log in here! 
    return ... 

どのように私はアプリケーション全体loggerを共有することができますか?

+1

https://docs.python.org/3/howto/logging.htmlを読んだことはありますか? – jonrsharpe

+0

@jonrsharpeのどの部分をお勧めしますか?私はロガーを作成する方法を知っています。ロガーオブジェクトをどこにでも渡すことなくアプリケーション全体で共有する方法はわかりません。 – Loggy

+0

*「1つのロガーを共有する」*必要はありません。各部は '__name__'のロガーを作成しますが、モジュールの最上位にあるログ(ファイルへの書き込みなど)の処理を設定することができます。 – jonrsharpe

答えて

2

私が欠けている点は、デフォルトではPythonロガーが階層的であるということです。主なアプリケーションでは、固定名のロガーを作成するだけです(メインスクリプトの名前を使用できます)。たとえば、次のように

appname()は次のように定義されて
mainapp.py: 

import logging 

root_logger = logging.getLogger(appname()) 
# do any logger setup 

:あなたはルートロガーを取得したり、ルートロガーの子を取得することができますどちらかあなたのモジュールのいずれにおいても

def appname(): 
    return os.path.splitext(os.path.basename(sys.argv[0]))[0] 

moduleX.py: 

import logging 
module_logger = logging.getLogger("%s.moduleX" % (appname())) 

module_loggerが実行するログは、ルートロガーによって処理されます。 loggingモジュールではるかに多くのことが達成できます。おそらく別の視点でhttps://docs.python.org/2/howto/logging.htmlの別の読み取りが価値があります。

関連する問題