本記事では、Pythonのログ出力方法について説明します。
自由自在に使用できるようになると、print
文よりも便利なので、習得を目指しましょう。
loggingオブジェクトの役割
よく使用されるloggingオブジェクトをまとめておきます(わかりやすさのため厳密さを犠牲にしています)
オブジェクト | 役割 |
---|---|
logging.Logger | ログの記録を生成したり、ログの命令をする |
logging.handler | loggerに紐づけられ、受け取った記録を出力 |
logging.formatter | handlerの出力形式を整形 |
ログレベルについて
さらに、logger、handlerには、ログレベルと呼ばれる設定を行えます。
logger, handlerに以下のログレベルを設定することで、ログレベル以上のログを対象に操作を行います。
- DEBUG : プログラム内の情報を出力 :
debug()
- INFO : 正常な動きをしている情報 :
info
- WARNING : 警告をしている :
warning()
- ERROR : 問題が起きた時に出力 :
error()
- CRITICAL : めちゃめちゃ重大なことが起きている :
critical()
loggerの基本的な使用方法
loggerの基本的な使用例を以下に示します。
import logging
from logging import getLogger, StreamHandler, Formatter
# formatterの設定
formatter = logging.Formatter('%(asctime)s | %(name)s | %(levelname)s | %(message)s')
# loggerの設定
# loggerオブジェクトの宣言
logger = logging.getLogger(__name__)
# loggerのログレベル設定
logger.setLevel(logging.DEBUG)
# loggerの名前を確認
print(logger.name)
# handlerの設定
# handlerの生成, 標準出力にログを出力するhandlerを生成
handler1 = logging.StreamHandler()
# handlerのログレベル設定(ハンドラが出力するエラーメッセージのレベル)
handler1.setLevel(logging.DEBUG)
# handlerとformatterを紐づける
handler1.setFormatter(formatter)
# handlerの生成, テキストファイルに出力するhandlerを生成
handler2 = logging.FileHandler('sample.log', 'a')
# handlerのログレベル設定(ハンドラが出力するエラーメッセージのレベル)
handler2.setLevel(logging.DEBUG)
# handlerとformatterを紐づける
handler2.setFormatter(formatter)
# handlerをloggerに紐付ける
logger.addHandler(handler1)
logger.addHandler(handler2)
# logの出力テスト
logger.debug("TEST LOGG")
<output>
2022-02-22 11:41:13,824 | __main__ | DEBUG | TEST LOGG
__main__
さらに、sample.log
というテキストファイルにもlogを出力しています。
2022-02-22 11:41:13,824 | __main__ | DEBUG | TEST LOGG
さらに、関数にまとめて書いておきます。
def init_logger(log_file='sample.log'):
formatter = logging.Formatter('%(asctime)s | %(name)s | %(levelname)s | %(message)s')
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
handler1 = logging.StreamHandler()
handler1.setLevel(logging.DEBUG)
handler1.setFormatter(formatter)
handler2 = logging.FileHandler(filename=log_file)
handler2.setLevel(logging.DEBUG)
handler2.setFormatter(formatter)
logger.addHandler(handler1)
logger.addHandler(handler2)
return logger
実際に使用してみましょう。
sample_logger = init_logger()
sample_logger.debug('TEST LOGG')
<output>
2022-02-22 11:54:09,890 | __main__ | DEBUG | TEST LOGG
まとめ
本記事では、ログ出力の方法を紹介しました。
使い方によって、print
文よりもはるかに便利なので、有効活用してください!
Pythonを学習するのに効率的なサービスを紹介していきます。
まず最初におすすめするのは、Udemyです。
Udemyは、Pythonに特化した授業がたくさんあり、どの授業も良質です。
また、セール中は1500円定義で利用することができ、コスパも最強です。
下記の記事では、実際に私が15個以上の講義を受講して特におすすめだった講義を紹介しています。
【最新】UdemyでおすすめのPythonコース|東大生が厳選!10万を超える講座があるUdemyの中で、Pythonに関係する講座を厳選しました。また、本記事では、Udemyを使用しながらPythonをどのような順番で勉強するべきかを紹介しました。ぜひ参考にしてください。...
他のPythonに特化したオンライン・オフラインスクールも下記の記事でまとめています。
【最新】Pythonに強いプログラミングスクール7選|東大生が厳選Pythonの流行と共に、Pythonに強いプログラミングスクールが増えてきました。本記事では、特にPythonを効率的に学ぶことができるプログラミングスクールを経験をもとに厳選して、内容を詳しく解説しています。...
自分の学習スタイルに合わせて最適なものを選びましょう。
また、私がPythonを学ぶ際に使用した本を全て暴露しているので参考にしてください。