[Python実践]Loggingに挑戦してみよう!《応用編》〜公式ドキュメントをもとに解説〜
はじめに
今回はPythonの「Logging」の応用について解説していこうと思います!
「Logging」の基礎についてはこちらの記事にまとめてあります。
「Logging」はPythonの実務などでよく使われるので、Pythonエンジニアを目指している方は是非この記事でマスターしていってください!
この記事はPythonの公式ドキュメントを参考にしています。
Pythonに限らず、プログラミング言語の公式ドキュメントは非常に読みにくいので、この記事でわかりやすく解説していきます。
「Loggingよく見かけるんだけど全くわからない...」
「Pythonエンジニアを目指して学習中」
「Pythonスキルのレベルアップをしたい!」
このような人のお役に立てれば幸いです。
それでは早速本題に入っていきましょう!
「Logging」はPythonの基礎を理解していないと難しいので、Pythonの基礎を理解していない人は以下を参考に学習してください!
ロギングとは?
まずは「Logging」がどういったものなのかなどの概要から見ていきましょう。
「Logging」とは以下のようなものです。
- プログラムが実行されているときに起こったイベントを追跡してくれる。
- 重要度を設定して、特定のイベントが発生したことをメッセージと共に知らせてくれる。
より詳しくはこちらにまとめてあります。
細かくみてみる
ロギングは「Logger」クラスのインスタンスにメソッドに呼び出して実行されています。
「ロガー」は、どこでイベントのログが取られたかを明らかにしてくれます。
名前の確認
まずはロガーの名前を確認してきましょう。
logger = logging.getLogger(__name__)
print(logger)
# <Logger __main__ (WARNING)>
__main__
とWARNINIG が表示されていますね。
__main__
は実行されているファイルのことで、WARNINIG
はデフォルトの重要度レベルのことです。
__name__
と指定することが推奨されています。
明示的に自分で指定
次に明示的に「ロガー」の名前を指定してみましょう。
logger = logging.getLogger("かるでね")
print(logger)
# <Logger かるでね (WARNING)>
自分が指定した通り、かるでねと出力されていますね。
重要度レベル変更してみる
では次に重要度レベルを変更してみましょう。
import logging
logging.basicConfig(level=logging.ERROR)
logger = logging.getLogger(__name__)
print(logger)
# <Logger __main__ (ERROR)>
3行目でERROR
に設定してみると、出力部分がWARNINIG
からERROR
に変わってますね。
他のファイルで実行されたロガー名を確認
名前が__main__
だとよくわからないので、別ファイルのロガー名を確認してみましょう。
まずはtest.py
に以下を記入してください。
import logging
def log_info():
logger = logging.getLogger(__name__)
return logger
次にmain.py
に以下を記入してください。
import logging
import test
logger = logging.getLogger(__name__)
print(logger)
print(test.log_info())
# <Logger __main__ (WARNING)>
# <Logger test (WARNING)>
main.py
のロガーは__main__
と表示されています。(ファイル名がmain.pyだからではなく、「実行されているファイル」という意味です。
test.py
の方はtest
と表示されています。
これで__name__
が実行されているファイル名を参照していることがわかります。
root
root
とはロガー階層の一番上に位置しているものです。
こんな感じのイメージですね。
ちなみに普通にロギングで出力されたメッセージを見るとひっそり出力されているのが確認できます。
import logging
logging.warning('Warningだよ!!!')
# WARNING:root:Warningだよ!!!
真ん中にroot
というのがしっかりありますね。
続き
これより先は以下の記事にまとめています。
より詳しくLoggingについて学ぶことができるので、興味がある方はぜひ!
(もちろん無料です!)
Discussion