Pythonを使ったロギングの機能をさらに見ていきましょう。
フォーマッタに続いて、ここではロガー(logger)を扱います。
basicConfig()を使ってログレベルを設定できるということは既に学びましたが、ロガーを使うことで、このログレベルの設定を引き継ぎながら、特定の処理のログレベルの設定を変更することができます。
ロガーの設定
具体的に見ていきましょう。
単純なロギングのコードはこう書くことができます。
import logging
logging.basicConfig(level=logging.INFO)
logging.info('info')
既に扱った内容ですので、特に問題はないはずです。ロギングのレベルをINFOにしています。
実行するとこうなります。
これにロガーの設定を加えていきましょう。
import logging
logging.basicConfig(level=logging.INFO)
logging.info('info')
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.debug('debug')
先ほどのコード追記していきます。
logging.getLogger()にファイル名を指定します。ここでは __name__ として自身のファイルであるrootを示しています。続けて、logging.setLevel()でレベルをにDEBUG指定し、logger.debug()で出力するようにしています。
これを実行してみるとこうなります。
INFOとDEBUGの両方が出力されているのがわかります。INFOはこれまでと同じで、DEBUGは__main__ ということで、これまでのロガーを持ってきてレベルを設定し直して出力し直しています。
別ファイルでロガーを設定する
先ほどのgetLogger()には__name__を指定しましたが、別のnameを指定して使うことができます。これは別ファイルでロガーを作って、カスタマイズを加えて開発する時などに利用します。
具体的にやっていきましょう。
次のようなロガーを別ファイルに記述します。ここではファイル名をtestlogger.pyとしておきます。
import logging
logger = logging.getLogger(__name__)
def do_something():
logger.info('from testlogger')
loggerを設定して、do_something()という関数を作って出力処理を記述しています。
ここで、元のlogging_lesson.pyを次のように書き換えます。
import logging
import testlogger
logging.basicConfig(level=logging.INFO)
logging.info('info')
testlogger.do_something()
先ほど作ったtestlogger.pyをモジュールとしてインポートしています。basicConfig()でログレベルを指定し、loggingの出力をしているところはこれまでと同じ。最後に、インポートしたモジュールからdo_something()を呼び出しています。
実行してみましょう。
ログを見ると、メインの処理はrootで表示されています。そして、testloggerとインポートしたロガーのファイル名が表示され、メッセージが表示されているのがわかります。
こうすることで、どこの処理が呼ばれているのかがわかります。
ロガー(testlogger.py)をもう少し書き換えてみます。
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
def do_something():
logger.info('from testlogger info')
logger.debug('from testlogger debug')
setLevel()を加えて、処理を追加しています。
これに合わせてメインの方(logging_lesson.py)も書き換えてみます。
import logging
import testlogger
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info('from main')
testlogger.do_something()
メインの方でのgetLogger()を指定しています。
実行してみます。
これはメインのところでbasicConfig()でまずロギングの設定をして、それ以降はロガーを設定していくというやり方になります。
出力結果を見ていくと、どこがメインの処理で、何がパッケージやモジュールで呼ばれたものなのかがわかります。
まとめ
Pythonを使ったロギングの機能について、ここではロガー(logger)を扱いました。
basicConfig()を使ってログレベルを設定したあとで、ロガーを使って、このログレベルの設定を引き継ぎながら、特定の処理のログレベルの設定を変更することができます。
このロガーを別モジュールとして設定して、様々なカスタマイズを施してインポートして開発に利用するようです。