Pythonでログファイルを扱う方法を解説!初心者でもわかるloggingモジュールの使い方
生徒
「Pythonでプログラムの動作を記録する方法ってありますか?あとで見返したいんですが…」
先生
「それなら、loggingモジュールを使うといいですね。ログという記録を自動で残せるんです。」
生徒
「エラーとか動作の流れを、ファイルに保存できたりしますか?」
先生
「はい、できますよ。では、初心者の方でもわかるように、基本からloggingモジュールの使い方を説明していきますね。」
1. ログファイルとは?loggingモジュールを使う理由
ログファイルとは、プログラムが実行されたときの情報やエラーなどを記録するファイルのことです。ログという言葉は、「記録」や「日誌」という意味で使われます。
Pythonでは、logging(ロギング)という標準モジュールを使うことで、簡単にログを記録できます。標準モジュールとは、Pythonに最初から入っている機能で、追加インストールなしで使えます。
2. loggingモジュールの基本的な使い方
まずは、ログをファイルに書き込むための基本的なコードを紹介します。これでログファイルが作成され、メッセージが自動で記録されます。
import logging
logging.basicConfig(filename='app.log', level=logging.INFO)
logging.info('プログラムが開始されました')
basicConfigはログの設定をするための関数で、filenameで保存するファイル名を指定します。levelは記録する重要度のレベルです。
3. ログレベルとは?種類と使い分け
ログには、「どれくらい重要な情報か」を表すログレベルがあります。以下は主な種類です。
DEBUG(デバッグ):開発中の細かい情報INFO(インフォ):一般的な実行情報WARNING(ワーニング):注意が必要な情報ERROR(エラー):問題が起きたときCRITICAL(クリティカル):重大なエラー
たとえば、ログレベルをWARNINGにすると、INFOやDEBUGの情報は記録されません。重要な情報だけ残したい場合に便利です。
4. 実際に複数のログを出力してみよう
それぞれのログレベルを使って、ログファイルに複数のメッセージを記録してみましょう。
import logging
logging.basicConfig(filename='sample.log', level=logging.DEBUG)
logging.debug('デバッグ情報')
logging.info('通常の情報')
logging.warning('警告が出ました')
logging.error('エラーが発生しました')
logging.critical('致命的な問題が起きました')
このコードを実行すると、"sample.log"というファイルが作成され、その中に各ログメッセージが追記されます。
5. ログファイルの出力例
ログファイルには次のような形で記録されます。
DEBUG:root:デバッグ情報
INFO:root:通常の情報
WARNING:root:警告が出ました
ERROR:root:エラーが発生しました
CRITICAL:root:致命的な問題が起きました
rootはログの出力元を示すもので、特に設定しないとこう表示されます。日時を表示したいときは、設定を追加すれば対応可能です。
6. ログに日付や時間を表示するには?
ログに時間や日付を含めたい場合は、formatというオプションを使います。以下のように設定します。
import logging
logging.basicConfig(
filename='time.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logging.info('ログに時間を追加しました')
%(asctime)sは日付と時刻、%(levelname)sはレベル名、%(message)sはメッセージ本文を表します。
7. コンソールにもログを出力する方法
ログをファイルだけでなく、画面(コンソール)にも表示したい場合は、StreamHandlerを使います。
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
file_handler = logging.FileHandler('both.log')
stream_handler = logging.StreamHandler()
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
logger.info('ファイルと画面に出力されます')
この設定をすると、ログはファイルと画面の両方に出力され、プログラムの状態をリアルタイムで確認できます。
8. よくあるエラーと対策
初心者がloggingモジュールを使うときに、よくあるミスを紹介します。
- ログが出力されない:
ログレベルの設定が原因のことが多いです。INFOにしているのにdebug()だけ使っていませんか? - 同じメッセージが2回表示される:
basicConfigとaddHandlerを両方使っていると、重複出力されることがあります。 - ファイルが開けない:
すでにファイルを別のソフトで開いていると、ログが書き込めないことがあります。
9. loggingモジュールを使うメリットとは?
print()関数でも動作の確認はできますが、loggingモジュールを使うと次のような利点があります。
- ログファイルとして記録が残る
- ログレベルで重要度を区別できる
- エラーの原因をあとから確認しやすくなる
- コンソールとファイル両方に出力できる
Pythonのログ機能は、初心者でも使いやすいように設計されています。ぜひ積極的に活用して、プログラムの動作を記録する習慣をつけましょう。