プログラムの動作確認に、あちこちに print() を書いては、あとで消し忘れた経験はありませんか? 小さなスクリプトなら print() で十分ですが、ファイルが増えたり、他の人が使うプログラムになったりすると、「いつ・どこで・何が起きたか」を整理して残す仕組みが必要になります。
そこで活躍するのが、Python標準ライブラリの logging モジュールです。この記事では、loggingの基本的な使い方から、ログレベル、フォーマット、ファイル出力、例外のログ記録まで、初心者向けに実際に動くコードで解説します。
loggingモジュールとは?print()との違い
loggingは、プログラムの実行状況を「ログ」として記録するための標準モジュールです。インストール不要で、import logging だけで使えます。print() と比べた利点は次のとおりです。
- 重要度(ログレベル)で出力を切り替えられる(開発中は詳細に、本番では重要なものだけ、など)
- 日時・ファイル名・行番号などを自動で付けられる
- コンソールだけでなくファイルにも同時に出力できる
- コードを書き換えずに、設定だけで出力のオン・オフを変えられる
最小のコードで試す:logging.info()とlogging.warning()
まずは一番シンプルな例です。
import logging
logging.warning("ディスク容量が少なくなっています")
logging.info("この行は表示されません")
# 実行結果
# WARNING:root:ディスク容量が少なくなっていますinfo が表示されないのは、デフォルトのログレベルが WARNING だからです。次のセクションで詳しく見ていきましょう。
5つのログレベルを理解しよう
loggingには重要度の低い順に5つのレベルがあります。設定したレベル以上のログだけが出力されます。
- DEBUG(10):開発中の詳細な情報
- INFO(20):処理が順調に進んでいることの記録
- WARNING(30):問題の兆候。動作は継続できる
- ERROR(40):エラーで一部の処理に失敗した
- CRITICAL(50):プログラム全体が続行できない重大な障害
レベルを変えるには basicConfig を使います。
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("デバッグ情報")
logging.info("処理を開始します")
logging.warning("注意が必要です")
logging.error("エラーが発生しました")
logging.critical("致命的な障害です")
# 実行結果
# DEBUG:root:デバッグ情報
# INFO:root:処理を開始します
# WARNING:root:注意が必要です
# ERROR:root:エラーが発生しました
# CRITICAL:root:致命的な障害ですなお、basicConfig は最初に1回だけ呼ぶ設定で、すでにログが出力された後に呼んでも反映されません。プログラムの先頭で設定するのがコツです。
ログを入れる習慣がつくと、エラー対応もぐっと楽になります。try-exceptの基本が不安な方は、例外処理(try-except)の使い方も合わせてご覧ください。
ログのフォーマットを整える
format 引数を使うと、日時やレベル名などを自由に並べられます。
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
logging.info("アプリを起動しました")
# 実行結果(日時は実行時刻になります)
# 2026-11-06 09:00:00 [INFO] アプリを起動しましたよく使うフォーマット指定子は次のとおりです。
%(asctime)s:日時%(levelname)s:ログレベル名%(name)s:ロガー名%(filename)s/%(lineno)d:ファイル名と行番号%(message)s:ログのメッセージ
ファイルにログを保存する
import logging
logging.basicConfig(
filename="app.log",
encoding="utf-8",
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
)
logging.info("ファイルに記録します")
# app.log の中身
# 2026-11-06 09:00:00,123 [INFO] ファイルに記録しますencoding 引数はPython 3.9以降で使えます。日本語を含むログは、文字化け防止のために指定しておくと安心です。
実践:例外をログに残す(logging.exception)
エラー処理でloggingが特に役立ちます。logging.exception() を except ブロックの中で呼ぶと、エラーメッセージに加えてトレースバック(どこで起きたかの履歴)も自動で記録されます。
import logging
logging.basicConfig(level=logging.INFO)
def divide(a, b):
try:
return a / b
except ZeroDivisionError:
logging.exception("0で割ろうとしました")
return None
print(divide(10, 2))
print(divide(10, 0))
# 実行結果
# 5.0
# ERROR:root:0で割ろうとしました
# Traceback (most recent call last):
# ...(トレースバックが続く)
# ZeroDivisionError: division by zero
# None関数の書き方に自信がない方は、関数(def)の作り方の記事も参考にしてみてください。
モジュールごとにロガーを使う(getLogger)
規模が大きくなると、ファイルごとにロガーを分けるのが一般的です。logging.getLogger(__name__) でモジュール名つきのロガーを作れます。
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO, format="%(name)s: %(message)s")
logger.info("ロガーを使ったログです")
# 実行結果(直接実行した場合、__name__ は __main__ になります)
# __main__: ロガーを使ったログですモジュール分割の考え方は、import文とモジュールの使い方で詳しく解説しています。ファイルの扱いに慣れていない方は、with構文の使い方もあわせて確認しておくと、ログファイルの理解が深まります。
もっと効率的にPythonを学びたい人へ
ログ出力やエラー処理は、実務でコードを書くようになると必ず必要になるスキルです。ただ、独学だと「自分の書き方が正しいのか」を判断しづらく、つまずいたまま時間だけが過ぎてしまうことも少なくありません。
そんなときは、マンツーマン指導で質問できるスクールを検討するのも一つの手です。未経験からのPython習得や転職サポート、無料カウンセリングを用意しているスクールもあります。スクール選びの比較軸は、プログラミングスクールの選び方を比較した記事で詳しくまとめています。
※本記事には広告(アフィリエイトリンク)を含みます。
Pythonプログラミング|マンツーマンレッスンで初めてをプロに育てる【Python Winner】![]()
まとめ
- loggingは標準モジュールで、
import loggingだけで使える - ログレベルはDEBUG/INFO/WARNING/ERROR/CRITICALの5段階。デフォルトはWARNING以上
basicConfigでレベル・フォーマット・出力先ファイルを設定する(最初に1回だけ)- 例外の記録には
logging.exception()が便利 - 規模が大きくなったら
getLogger(__name__)でモジュールごとにロガーを分ける
まずは print() をloggingに置き換えるところから始めてみてください。ログを残す習慣は、バグ調査の時間を大きく減らしてくれます。
ナノトイラボ 