Python PR

【必見】Pythonのログ出力|loggingを徹底解説!

記事内に商品プロモーションを含む場合があります

 

本記事では、Pythonのログ出力方法について説明します。

自由自在に使用できるようになると、print文よりも便利なので、習得を目指しましょう。

 

loggingオブジェクトの役割

 

よく使用されるloggingオブジェクトをまとめておきます(わかりやすさのため厳密さを犠牲にしています)

オブジェクト 役割
logging.Logger ログの記録を生成したり、ログの命令をする
logging.handler loggerに紐づけられ、受け取った記録を出力
logging.formatter handlerの出力形式を整形

 

 

ログレベルについて

 

さらに、logger、handlerには、ログレベルと呼ばれる設定を行えます。

logger, handlerに以下のログレベルを設定することで、ログレベル以上のログを対象に操作を行います。

 

  1. DEBUG : プログラム内の情報を出力 : debug()
  2. INFO : 正常な動きをしている情報 : info
  3. WARNING : 警告をしている : warning() 
  4. ERROR : 問題が起きた時に出力 : error() 
  5. 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文よりもはるかに便利なので、有効活用してください!

ABOUT ME
努力のガリレオ
【運営者】 : 東大で理論物理を研究中(経歴)東京大学, TOEIC950点, NASA留学, カナダ滞在経験有り, 最優秀塾講師賞, オンライン英会話講師試験合格, ブログと独自コンテンツで収益6桁達成 【編集者】: イングリッシュアドバイザーとして勤務中(経歴)中学校教諭一種免許取得[英語],カナダ留学経験あり, TOEIC650点
Python学習を効率化させるサービス

 

Pythonを学習するのに効率的なサービスを紹介していきます。

まず最初におすすめするのは、Udemyです。

Udemyは、Pythonに特化した授業がたくさんあり、どの授業も良質です。

また、セール中は1500円定義で利用することができ、コスパも最強です。

下記の記事では、実際に私が15個以上の講義を受講して特におすすめだった講義を紹介しています。

 

【最新】UdemyでおすすめのPythonコース|東大生が厳選!10万を超える講座があるUdemyの中で、Pythonに関係する講座を厳選しました。また、本記事では、Udemyを使用しながらPythonをどのような順番で勉強するべきかを紹介しました。ぜひ参考にしてください。...

 

他のPythonに特化したオンライン・オフラインスクールも下記の記事でまとめています。

 

【最新】Pythonに強いプログラミングスクール7選|東大生が厳選Pythonの流行と共に、Pythonに強いプログラミングスクールが増えてきました。本記事では、特にPythonを効率的に学ぶことができるプログラミングスクールを経験をもとに厳選して、内容を詳しく解説しています。...

 

自分の学習スタイルに合わせて最適なものを選びましょう。

また、私がPythonを学ぶ際に使用した本を全て暴露しているので参考にしてください。