Python

【Python】第8章第14回:ロギングとエラーハンドリング

本記事では、Pythonでのロギングとエラーハンドリングの基礎を学びます。プログラムのデバッグやエラー管理の方法を学び、堅牢なアプリケーション開発に役立てましょう。

0. 記事の概要

この記事を読むメリット

  • ロギングの基礎を理解:プログラムの動作を追跡しやすくなります。
  • エラーハンドリングのスキル向上:例外処理のベストプラクティスを学べます。
  • プログラムの信頼性を向上:エラーに強いコードを書くためのスキルを習得できます。

この記事で学べること

  • ロギングの重要性と基本概念
  • Pythonの標準ロギングモジュールの使い方
  • エラーハンドリングと例外処理のベストプラクティス

1. ロギングの基本とは?

1.1 ロギングの目的

ロギングとは、プログラムの動作やエラー情報を記録する仕組みです。以下の目的で使用されます。

  • デバッグ: プログラムの不具合を特定。
  • 監視: プログラムの状態を把握。
  • エラー検出: 問題発生時に迅速に対応。

1.2 ロギングの種類

ロギングには以下のような種類があります。

  • デバッグログ: 開発時の詳細情報。
  • 情報ログ: プログラムの進行状況。
  • エラーログ: エラー発生時の情報。

2. Python標準ロギングモジュールの使い方

2.1 ロギングの基本例

# loggingモジュールの基本例
import logging

logging.basicConfig(level=logging.INFO)  # ログレベルを設定
logging.debug("デバッグ情報")  # 表示されない
logging.info("情報ログ")
logging.warning("警告ログ")
logging.error("エラーログ")
logging.critical("重大なエラー")

2.2 ログをファイルに出力する

# ログをファイルに保存
logging.basicConfig(filename='app.log', level=logging.INFO,
                    format='%(asctime)s - %(levelname)s - %(message)s')
logging.info("このログはファイルに記録されます")
動作解説
  • basicConfig: ロギングの基本設定(ログレベル、フォーマット、出力先)。
  • ログレベル: 重要度に応じてログをフィルタリング。
  • ログのフォーマット: タイムスタンプやメッセージ内容をカスタマイズ可能。

3. エラーハンドリングと例外処理

3.1 例外処理の基本

# try-except構文の基本例
try:
    result = 10 / 0
except ZeroDivisionError as e:
    logging.error(f"エラー発生: {e}")
finally:
    print("終了処理")

3.2 ユーザー定義例外

# ユーザー定義例外の例
class CustomError(Exception):
    pass

try:
    raise CustomError("カスタムエラーが発生しました")
except CustomError as e:
    logging.critical(f"重大なエラー: {e}")

4. 練習問題

以下の課題に挑戦してみましょう。

  1. 警告ログを出力するスクリプトを作成してください。
  2. 0で割る操作を例外処理で防ぎ、エラーログを記録してください。
  3. ログを日付ごとに分割して保存する仕組みを実装してください。

5. 練習問題の解答と解説

問3の解答例

# ログを日付ごとに保存
from logging.handlers import TimedRotatingFileHandler

handler = TimedRotatingFileHandler("app.log", when="midnight", interval=1)
handler.suffix = "%Y-%m-%d"
logging.basicConfig(handlers=[handler], level=logging.INFO)

logging.info("このログは日付ごとに保存されます")

6. まとめ

本記事では、Pythonでのロギングとエラーハンドリングの基本を学びました。これらの技術を活用して、堅牢で保守性の高いプログラムを開発してください。