ログの出力!Pythonでloggingを使う方法【初心者向け】
初心者向けにPythonでloggingを使う方法について解説しています。エラーの出力やデータ情報の出力などログを出力する際に使います。エラーが起きた際には必ず使う必要が出てくるので、書き方を覚えておくとスムーズに開発が進むでしょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
監修してくれたメンター
太田 和樹
普段は主に、Web系アプリケーション開発のプロジェクトマネージャーとプログラミング講師を行っている。仕事のほとんどをリモートオフィスで行う。
今回は、Pythonでloggingを使う方法について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
loggingモジュールは、プログラムのエラー情報やステータス情報をログとして出力できます。
print関数でも、そのような出力は可能ですが、loggingモジュールの方がより高機能でログを出力することに特化されており、出力するフォーマットや情報のレベルを細かく指定可能です。
この記事で、具体的な使い方を学びましょう。
Pythonでprintを使う方法の記事も合わせてご覧ください。
目次
そもそもPythonについてよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まります。
Pythonのloggingの書き方
loggingの基本的な書き方は以下のとおりです。
import logging logging.basicConfig(format=ログフォーマット, level=logging.ログレベル) logging.ログレベルに応じた関数(メッセージ)
1行目と2行目はloggingモジュールに対する設定なので、プログラムの最初の方で1回だけ書けば大丈夫です。
3行目の「logging.ログレベルに応じた関数(メッセージ)」で、ログを出力しています。
この3行目の記述を、プログラム中でログを出力したい場所に書くことになります。
1行目:モジュールのimport
それでは、loggingの書き方を詳しく確認していきましょう。
1行目の「import logging」では、importを使用してloggingモジュールを呼び出します。
毎回この内容で、そのまま書けば大丈夫です。
2行目:ログのフォーマットとログレベルの指定
2行目の「logging.basicConfig(format=ログフォーマット, level=logging.ログレベル)」では、出力するログのフォーマットとログレベルを指定します。
この2行目は省略可能ですが、この指定を活用することが、loggingモジュールを利用するポイントになります。
ログフォーマット:
loggingモジュールはprint文のように単にメッセージを出力するだけではありません。
ログフォーマットを使い、ログに出力する内容を細かく指定できます。
例えば以下のように指定すると、日時とログレベル、メッセージを出力できます。
format='%(asctime)s [%(levelname)s]:%(message)s'
「%(asctime)s」が日時、「%(levelname)s」がログレベル、「%(message)s」がメッセージを表しています。
この他にも、様々な指定が可能です。指定できる内容の一覧は公式サイトを確認しましょう。
logging — Python用ロギング機能 – LogRecord属性
ログレベル:
ログレベルでは、出力するログのレベルを指定します。
Pythonにおけるloggingのレベルは5つあり、関数名と対応しています。
関数名 | ログレベル | 数値 | 利用シーン |
debug( ) | DEBUG | 10 | プログラミング工程で変数の値などを確認したい時 |
info( ) | INFO | 20 | データを読み込んだ件数など、プログラムの運用に関する情報を出力したい時 |
warning( ) | WARNING | 30 | プログラムの運用中に、エラーの原因になりそうな事象が発生した時 |
error( ) | ERROR | 40 | プログラムの運用中に、一部の機能を実行できないエラーが発生した時 |
critical( ) | CRITICAL | 50 | プログラムの運用中に、プログラム全体の実行を続けられないような重大なエラーが発生した時 |
「 level=logging.ログレベル」で指定したログレベル以上のものが、出力の対象となります。
例えば以下のように指定すると、error()とcritical()で記述した内容のみが出力対象となります。
逆に言えば、ソースコード中にdebug()やinfo()、warning()の記述があっても、それはログの出力対象になりません。
level=logging.ERROR
ログレベルは、プログラミングの工程に合わせて変更すると便利です。
例えば、プログラミングの途中でデバッグを行う際は、ログレベルをDEBUGにしておき、全てのログが出力されるようにします。
また、プログラミングが終わり、運用段階では、ログレベルをERRORにすることで、不要なログが出力されないようにできます。
3行目:ログの出力
3行目の「logging.ログレベルに応じた関数(メッセージ)」で、ログを出力しています。
ログレベルに応じた関数には、上記で紹介した関数名を指定します。
それぞれの書き方は以下のとおりです。
デバッグ:
logging.debug(メッセージ)
情報:
logging.info(メッセージ)
警告:
logging.warning(メッセージ)
エラー:
logging.error(メッセージ)
致命的:
logging.critical(メッセージ)
メッセージの部分には、文字列や変数、f文字列などを指定できます。
Pythonでimportを使う方法や、Pythonにおけるf-stringの利用方法の記事も合わせてご覧ください。
Pythonでloggingを使って書いてみよう
それでは実際にloggingモジュールを使ったソースコードを書いてみましょう。
Pythonの環境構築がまだの場合はAnacondaで行うと良いでしょう。
今回は「sample.py」というファイルにソースコードを記述しました。
sample.py
# モジュールのimport import logging # ログのフォーマットとログレベルの指定 FORMAT = '%(asctime)s [%(levelname)s]:%(message)s' logging.basicConfig(format=FORMAT, level=logging.DEBUG) # ログに出力する値の初期化 index = 10 # デバッグレベルのログを出力 logging.debug(f'デバッグ:index={index}') # ログに出力する値を更新 index += 10 # 情報レベルのログを出力 logging.info(f'情報:index={index}') index += 10 # 警告レベルのログを出力 logging.warning(f'警告:index={index}') index += 10 # エラーレベルのログを出力 logging.error(f'エラー:index={index}') index += 10 # 致命的なレベルのログを出力 logging.critical(f'致命的:index={index}')
上記のプログラムをターミナルから実行します。
python sample.py
実行結果:
実行結果は以下のとおりです。時間は実行した日時で変わります。
ログのフォーマットで指定した書式で出力されていることが確認できますね。
ログレベルには「DEBUG」を指定したため、ログレベルがDEBUG以上のものが出力されています。
2021-07-27 08:06:14,069 [DEBUG]:デバッグ:index=10 2021-07-27 08:06:14,069 [INFO]:情報:index=20 2021-07-27 08:06:14,069 [WARNING]:警告:index=30 2021-07-27 08:06:14,070 [ERROR]:エラー:index=40 2021-07-27 08:06:14,070 [CRITICAL]:致命的:index=50
次に、ログレベルをERRORに変更して実行してみましょう。
6行目の「DEBUG」の部分を「ERROR」に変更します。
logging.basicConfig(format=FORMAT, level=logging.ERROR)
実行結果:
実行結果は以下のとおりです。
ログレベルに「ERROR」を指定したことで、ログレベルがERROR以上のもののみが出力されるように変わりました。
2021-07-27 08:08:37,850 [ERROR]:エラー:index=40 2021-07-27 08:08:37,850 [CRITICAL]:致命的:index=50
まとめ
今回は、Pythonでloggingを使う方法を解説しました。
loggingを使うと、出力するログのフォーマットやログレベルを指定して、ログを出力できます。
プログラミング中だけでなく、プログラム完成後の運用段階でも使えるので活用しましょう。
入門向けPythonの学習サイトも記事にしているので、学習したい方は参考にしてみてください。
Pythonを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
プログラミングを学習していて、このように思ったことはありませんか?
テックアカデミーのPythonコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、人工知能(AI)や機械学習の基礎を学べます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!