Python スクリプトを運用環境へ導入する際、処理の進捗や例外発生個所をログへ記録しておくと、あとから原因を特定しやすくなります。本記事では logging
モジュールを使い、Excel ブックを複数作成するスクリプトに情報レベルのログを組み込む手順を解説いたします。
目次
動作環境
項目 | 内容 |
---|
OS | Windows / macOS / Linux |
Python | 3.9 以上 |
ライブラリ | openpyxl (pip install openpyxl ) |
サンプルスクリプト
import logging
import sys
from openpyxl import Workbook
# 1. ログ設定
logging.basicConfig(
filename='generate_reports.log',
level=logging.INFO,
format='%(asctime)s [%(levelname)s] %(message)s'
)
logging.info('処理を開始しました')
try:
# 2. 生成するブック数をコマンドライン引数から取得
report_count = int(sys.argv[1])
for idx in range(report_count):
# 3. Excel ブック作成
new_wb = Workbook()
summary_ws = new_wb.active
summary_ws.title = 'Summary'
# 4. ファイル名を動的に決定
file_name = f'report_{idx + 1}.xlsx'
new_wb.save(file_name)
# 5. 成功ログ
logging.info('ブックを作成しました: %s', file_name)
except Exception:
# 6. 例外発生時はスタックトレースを含めて出力
logging.exception('予期せぬ例外が発生しました')
finally:
logging.info('処理が終了しました')
コード解説
行 | 処理内容 |
---|
logging.basicConfig | 出力ファイル名・レベル・フォーマットを一括設定します。%(asctime)s で日時を付加し、調査時の手掛かりを増やします。 |
report_count = int(sys.argv[1]) | ブック数を外部パラメータ化し、汎用性を高めています。 |
logging.info() | 通常進行中の情報を記録します。大量に記録する場合は DEBUG レベルへ下げると運用しやすくなります。 |
logging.exception() | except 節で使用すると、例外メッセージとスタックトレースをまとめてログへ出力できます。 |
finally: | 正常終了・異常終了のどちらでも実行されるため、終了ログを確実に残せます。 |
ログレベルの活用方法
メソッド | 主な用途 | 出力例 |
---|
logging.debug() | 詳細な変数値やループの進捗を確認したいとき | 開発時やテスト環境 |
logging.info() | 通常の処理結果や件数の記録 | 本番での定常ログ |
logging.warning() | 想定外だが処理続行可能な事象 | 存在しないファイルをスキップ |
logging.error() | 処理を一部スキップしたが継続可能なエラー | ファイル保存に失敗 |
logging.critical() | システム停止レベルの重大エラー | データベース接続不可 |
応用アイデア
ニーズ | 実装ヒント |
---|
ログをコンソールにも出力 | logging.StreamHandler() を追加し、ファイルと画面の両方へ同時出力 |
日ごとにログファイルを分割 | logging.handlers.TimedRotatingFileHandler で自動ローテーション |
JSON 形式でログを保存 | json-log-formatter ライブラリを利用し、解析ツールへ取り込みやすくする |
まとめ
logging
モジュールを取り入れることで、処理開始・成功・例外・終了 の各ポイントを可視化でき、障害調査や保守作業が格段に効率化します。Excel ファイル生成以外のバッチ処理でも同様に活用できますので、ぜひ導入をご検討ください。