logging.getLogger() を使用して、ロギング オブジェクト インスタンスを取得してみてください。
http://docs.python.org/3/library/logging.html#logging.getLogger
指定された名前でこの関数を呼び出すと、同じロガー インスタンスが返されます。これは、アプリケーションの異なる部分間でロガー インスタンスを渡す必要がないことを意味します。
更新:
これを行うための推奨される方法は、getLogger() 関数を使用して構成することです (ハンドラー、フォーマッターなどの設定)。
# main.py
import logging
import lib
def main():
logger = logging.getLogger('custom_logger')
logger.setLevel(logging.INFO)
logger.addHandler(logging.FileHandler('test.log'))
logger.info('logged from main module')
lib.log()
if __name__ == '__main__':
main()
# lib.py
import logging
def log():
logger = logging.getLogger('custom_logger')
logger.info('logged from lib module')
本当にロガー クラスを拡張する必要がある場合は、 logging.setLoggerClass(klass)を見てください。
更新 2 :
Logging クラスを変更せずにカスタム ログ レベルを追加する方法の例:
# main.py
import logging
import lib
# Extend Logger class
CUSTOM_LEVEL_NUM = 9
logging.addLevelName(CUSTOM_LEVEL_NUM, 'CUSTOM')
def custom(self, msg, *args, **kwargs):
self._log(CUSTOM_LEVEL_NUM, msg, args, **kwargs)
logging.Logger.custom = custom
# Do global logger instance setup
logger = logging.getLogger('custom_logger')
logger.setLevel(logging.INFO)
logger.addHandler(logging.FileHandler('test.log'))
def main():
logger = logging.getLogger('custom_logger')
logger.custom('logged from main module')
lib.log()
if __name__ == '__main__':
main()
カスタム レベルの追加は推奨されないことに注意してください: http://docs.python.org/2/howto/logging.html#custom-levels
カスタム ハンドラーを定義し、複数のロガーを使用することで、他の要件 (stderr へのオプションの出力) のトリックを実行できる場合があります。