Pythonでlogger.LEVELを設定してログを出し分ける

Python
ゆうすけ
ゆうすけ

PythonlogLEVELをつけて出し分けたいです。

資格マフィア
資格マフィア

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を設定することができます。

  1. CRITICAL
  2. ERROR
  3. WARNING
  4. INFO
  5. 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のLEVELbasicConfig を使うことで変更することができます。

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.pylogger 定義を記述して、
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を基礎から学ぶためには以下の書籍がオススメです。

 

この書籍は初心者向けにかなり丁寧に書かれています。

プログラミング本は難しく、
とっつきにくい印象があるかもしれませんが、
この書籍はとても分かりやすく、
読んでいて「楽しい」と思えるような書きっぷりになっています。

 

初めてPythonを基礎から学ぶ方にはオススメの書籍です。

 

また、Pythonについて基礎から学ぶのであれば、オンラインスクールがオススメです。


オンラインスクールで学習すると、講義も分かりやすく、
サポート体制もしっかりしているので、これからPythonを学ぶ人にもオススメです。


オンラインで無料レッスンを体験することもできるので、
自分にあっているかどうかを確かめることができます。


オススメは以下の3つです。
どのスクールも無料体験が用意されているので、
契約前に自分に最適なスクールを探すことができるでしょう。

✔️オススメのプログラミングスクール ベスト3

プログラミングスクールについては「プログラミングスクールで失敗しないためには【オススメベスト3も紹介】」の記事でも紹介しています。


気になった方はぜひチェックしてみて下さい〜!

コメント

タイトルとURLをコピーしました