PythonでlogにLEVELをつけて出し分けたいです。
Pythonのloggingライブラリ使えば可能だ。
他にもloggingライブラリの便利な使い方を解説しよう。
✔️ 本記事のテーマ
Pythonのloggingライブラリの使い方について
✔️ 読者さんへの前置きメッセージ
本記事は「Pythonのloggingライブラリの使い方」について書いています。
Pythonのloggingオブジェクトは便利でかつ強力です。
標準ライブラリですが、logを出力するための様々な機能を具備しています。
ユーザーのユースケースに沿ったlogを出力するためのカスタムの幅が広いことも特徴的です。
Python の logger では log に LEVEL を設定することで、logを出し分けることができます。
この記事では
Pythonのloggerの基本的な使い方と仕様について
サンプルコードとともに解説します。
それでは、解説していきましょう。
PythonのloggerにおけるLEVEL
Pythonのloggerでは以下のlog.LEVELを設定することができます。
- CRITICAL
- ERROR
- WARNING
- INFO
- DEBUG
コードで示すと以下のようになり、デフォルトではINFO以下は出力されないようになっています。
import logging
logging.critical('critical')
logging.error('error')
logging.warning('warning')
logging.info('info')
logging.debug('debug')
# CRITICAL:root:critical
# ERROR:root:error
# WARNING:root:warning
PythonのloggerのLEVELを変更する
ここでPythonのloggerのLEVELを変更してみましょう。
loggerのLEVELは basicConfig を使うことで変更することができます。
import logging
# LEVEL を DEBUG に変更
logging.basicConfig(level=logging.DEBUG)
logging.critical('critical')
logging.error('error')
logging.warning('warning')
logging.info('info')
logging.debug('debug')
# CRITICAL:root:critical
# ERROR:root:error
# WARNING:root:warning
# INFO:root:info
# DEBUG:root:debug
先ほどとは違って
「INFO」や「DEBUG」のメッセージも出力されるようになっています。
このように、その時々に応じて、LEVEL設定を変えることでユースケースに応じたlog出力を可能にします。(例えば、bugfix直後は低いLEVELのlogも出力する等)
Pythonのloggerのフォーマット
Pythonのloggerではlog出力のフォーマットを自由に設定することができます。
import logging
logging.warning('log msg is {}'.format('hoge fuga'))
logging.warning('log msg %s %s' % ('was', 'hoge fuga'))
# log msg is hoge fuga
# log msg was hoge fuga
基本的には、PythonのString型を扱う形式で、
format関数や%による変数代入を使って書くことができます。
Pythonのloggerのフォーマッターを定義する
先ほどはlog出力時にフォーマットを指定しましたが、
Pythonのloggerではフォーマッターとして定義して、
それをbasicConfigに渡すことができます。
import logging
# フォーマットを定義
formatter = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
# ログレベル、フォーマット定義を logging.basicConfig に渡す
logging.basicConfig(level=logging.DEBUG, format=formatter)
logging.info('log msg sample')
# 2021-03-03 03:03:03,364 - logger_sample.py - INFO - log msg sample
これにより、各所で仕込んだlog出力のメッセージを一律のフォーマットにすることができます。
Pythonのloggerのファイル出力
実際のユースケースではlogをファイル出力することが多いでしょう。
Pythonのloggerでは logging.basicConfig の引数として、
ファイルパスを指定することで対象のファイルにlogが出力されます。
import logging
# logファイルパスを指定する
logging.basicConfig(filename='./sample.log')
logging.warning('log msg sample')
loggerを別ファイルで定義する
システムの全ての実行ファイルにlogger定義を記述するのはあまり現実的ではないでしょう。
実際は、logger用ファイルに定義しておいて、
実行ファイルではそれを読み込むというユースケースが多いかと思います。
そこで logger.py に logger 定義を記述して、
main.py でその定義を読み込んで log 出力をしてみます。
# logger.py
import logging
def setup():
# ログレベル定義
level = logging.DEBUG
# フォーマット定義
formatter = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
# 出力先ファイル定義
file_path = './sample0323.log'
# 各種定義 を logging.basicConfig に渡す
logging.basicConfig(level=level,
format=formatter,
filename=file_path)
logger = logging.getLogger(__name__)
return logger
# main.py
from logger import setup
custom_logger = setup()
custom_logger.info('log msg of main file')
このようにすることで、
実行ファイルに余計な記述をすることなく、logger定義も管理しやすくなります。
Pythonを学ぶのに最高の一冊
Pythonのアンインストール方法について解説しました。
Pythonを基礎から学ぶためには以下の書籍がオススメです。
この書籍は初心者向けにかなり丁寧に書かれています。
プログラミング本は難しく、
とっつきにくい印象があるかもしれませんが、
この書籍はとても分かりやすく、
読んでいて「楽しい」と思えるような書きっぷりになっています。
初めてPythonを基礎から学ぶ方にはオススメの書籍です。
エンジニアとしての自身の価値をチェックする(完全無料)
エンジニアとして、
自分の価値がどれくらいのものかご存知でしょうか?
エンジニアとしてIT業界に身を置いていると
今の会社でずっと働くのか、フリーランスとして独立するのか …
と様々な選択肢があります。
どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも
自身の価値を知っておくことはとても重要です。
TechClips ME では、
職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。
▼▼▼▼▼
▲▲▲▲▲
しかもTechClips MEでは想定年収を企業から提示してくれるので、
自身の価値を数字で分かりやすくたしかめることができます。
登録はもちろん完全無料なので、一度登録してみると良いかもしれません。
コメント