Skip to content
閲覧中:
内部出力と外部出力のlogging

内部出力と外部出力のlogging

5,000行規模のシステムになると、**「エラーが起きたこと」を開発者がリアルタイムで把握し、後から原因を調査できる仕組み**が不可欠です。

一般的には、「ローカルに保存するログ」**と「外部に通知する監視ツール」**の2段階で構成します。


1. ログ出力(Logging)の基本設定

Python標準の logging ライブラリを使い、レベル(情報の重要度)に応じて出力先や内容を制御します。

推奨されるログ設定の例

Python
import logging

# 1. ロガーの設定
logger = logging.getLogger("app_logger")
logger.setLevel(logging.INFO)

# 2. 出力形式(フォーマット)の定義
formatter = logging.Formatter(
    '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)

# 3. ファイル出力用ハンドラ(日ごとにファイルを分ける設定が一般的)
file_handler = logging.FileHandler("app.log")
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

# 使用例
logger.info("ユーザーがログインしました: user_id=123")
logger.error("データベースへの接続に失敗しました")

2. 外部監視ツール(Sentry)の導入

ログファイルは「後から見に行く」ものですが、Sentryのようなツールは**「エラーが起きた瞬間に開発者に通知」**してくれます。

なぜSentryを使うのか?

  • 詳細な文脈(Context): エラー時の変数の中身、ブラウザの種類、実行していた関数の履歴がすべて記録されます。
  • 集約機能: 同じエラーが100回起きても、1つの「課題」としてまとめてくれます。
  • Slack連携: エラー発生時に即座にSlack通知を送れます。

Python(FastAPI)への導入例

Python
import sentry_sdk
from sentry_sdk.integrations.fastapi import FastApiIntegration

sentry_sdk.init(
    dsn="https://your-sentry-id@sentry.io/project-id",
    integrations=[FastApiIntegration()],
    # エラーだけでなくパフォーマンスも監視する場合
    traces_sample_rate=1.0, 
)

3. エラー発生時にSlackへ通知する方法

Sentryを使わずに、自前でSlack通知を送る「通知用ユーティリティ」を作ることもよくあります。前述のディレクトリ構成にあった utils/notifier.py に実装するイメージです。

Python
import requests

def send_slack_notification(message: str):
    webhook_url = "https://hooks.slack.com/services/Txxx/Bxxx/Xxxx"
    payload = {
        "text": f":warning: *システムエラー発生*\n{message}",
        "username": "Error-Bot",
        "icon_emoji": ":fire:"
    }
    try:
        requests.post(webhook_url, json=payload, timeout=5)
    except Exception as e:
        logger.error(f"Slack通知に失敗しました: {e}")

4. 5,000行規模での運用ポイント

  • ログの肥大化に注意: 何でもかんでもログに出すとディスク容量を圧迫します。INFO(通常時)と DEBUG(開発時)を使い分けましょう。
  • 機密情報を出さない: ログにユーザーのパスワードやクレジットカード番号が含まれないよう、バリデーションやフィルターをかけます。
  • エラーの優先順位付け: 全てのエラーでSlackを鳴らすと「オオカミ少年」状態になります。重大なエラー(CRITICAL)のみ通知する設定が理想的です。

次のステップへの提案

ログと監視の設定ができれば、システムの安定性は格段に上がります。

次は、これらすべての要素(要件定義、ディレクトリ構成、バリデーション、エラーハンドリング)を形にするための**「開発環境の構築(Dockerなど)」や、「チームで開発するためのGitの使い分け」**について詳しく知りたいですか?