mcpField
F
frappe-core-logging

frappe-core-logging

github.com/impertio-studio開発198114 回インストール30 週間前に更新
リポジトリ

frappe-core-logging について

Frappe 開発者向けに、アプリケーションログ、Error Log による追跡、本番環境の設定を解説するスキルです。用途に応じた記録方法とよくある誤用を確認できます。

主な機能

  1. 01ファイルログのローテーション
  2. 02データベースでの Error Log 管理
  3. 03ログレベルと本番設定のガイド
  4. 04Sentry と例外追跡のガイド
  5. 05ログのよくある誤用

活用シーン

  1. 01アプリケーションの診断情報や監査記録
  2. 02管理者が確認できるエラーの記録
  3. 03本番ログと監視の設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/impertio-studio/frappe_claude_skill_package --skill frappe-core-logging

インストール後、Claude Code で/frappe-core-loggingを入力して読み込まれたか確認します。

同梱ファイルreferences/error-tracking.mdreferences/logger-patterns.md

詳細

Frappe のログ記録とエラー追跡

3 つのログ記録メカニズム

メカニズム保存先用途
frappe.logger()ファイル(ローテーション)アプリケーションのログ記録、デバッグ情報、監査証跡
frappe.log_error()データベース(Error Log DocType)管理 UI で確認できるエラー、永続的な追跡
frappe.log() / frappe.errprint()stderr / リクエストスコープ手早いデバッグのみ(本番環境では使用しないでください)

判断フロー

Need to log something?
│
├─ Application logging (info, debug, warnings)?
│  └─ frappe.logger("my_module").info("message")
│     → Writes to sites/{site}/logs/my_module.log
│
├─ Error that admins should see in Desk UI?
│  └─ frappe.log_error(title="Short desc", message=traceback)
│     → Creates Error Log document (queryable, auto-cleanup)
│
├─ Quick debug during development?
│  └─ frappe.errprint(variable) — shows in console
│     → NEVER leave in production code
│
├─ Track all HTTP requests?
│  └─ Set enable_frappe_logger: true in site_config.json
│     → Logs to frappe.web.log
│
├─ Performance monitoring?
│  └─ Set monitor: true in site_config.json
│     → Logs to monitor.json.log (JSON, per-request metrics)
│
└─ External error tracking (Sentry)?
   └─ Set FRAPPE_SENTRY_DSN environment variable
      → Auto-captures unhandled exceptions

クイックリファレンス:frappe.logger()

# Get a logger for your module (ALWAYS specify module name)
logger = frappe.logger("my_app")

# Standard Python logging levels
logger.debug("Detailed diagnostic info")
logger.info("Normal operations: processed 50 records")
logger.warning("Something unexpected but recoverable")
logger.error("Operation failed", exc_info=True)
logger.critical("System-level failure")

# Full signature
frappe.logger(
    module=None,          # Logger name + log filename
    with_more_info=False, # Auto-log request form_dict
    allow_site=True,      # Log under site's logs/ directory
    filter=None,          # Custom logging.Filter
    max_size=100_000,     # Max bytes per log file (100KB default)
    file_count=20         # Rotated files retained (20 default)
)

ログの保存場所: sites/{site}/logs/{module}.log ローテーション: RotatingFileHandler — 1 ファイルあたり 100KB、バックアップ 20 個(ロガーあたり合計約 2MB)

デフォルトのログレベル
モードレベル効果
開発(_dev_server)WARNINGDebug/info は出力されません
本番環境ERRORエラー以上のみ
# Change level dynamically
frappe.utils.logger.set_log_level("DEBUG")

クイックリファレンス:frappe.log_error()

# ALWAYS use keyword arguments (title/message can swap otherwise)
frappe.log_error(
    title="Payment gateway timeout",          # Short description (140 chars max)
    message=frappe.get_traceback(),            # Full error details
    reference_doctype="Payment Entry",        # Related DocType
    reference_name="PE-00001"                 # Related document
)

# Minimal — auto-captures current traceback
try:
    risky_operation()
except Exception:
    frappe.log_error(title="Operation failed")

Error Log のクリーンアップ: 30 日後に自動削除されます。手動で実行する場合:frappe.whitelist: clear_error_logs()

自動で捕捉される例外

未処理の例外(HTTP 500 以上)は、自動的に Error Log に記録されます。

自動捕捉の対象外:

  • frappe.AuthenticationError
  • frappe.CSRFTokenError
  • frappe.SecurityException
  • frappe.InReadOnlyMode

本番環境の設定

site_config.json のキー
キー値効果
enable_frappe_loggertrueHTTP リクエストを記録 → frappe.web.log
logging2すべての SQL クエリを記録(デバッグ専用です!)
monitortrueリクエスト/ジョブのメトリクス → monitor.json.log
disable_error_snapshottrue例外の自動捕捉を無効化
環境変数
変数効果
FRAPPE_STREAM_LOGGING=1ファイルの代わりに stderr に記録
FRAPPE_SENTRY_DSN=<dsn>Sentry のエラー追跡を有効化
ENABLE_SENTRY_DB_MONITORINGSentry で SQL クエリを追跡
SENTRY_TRACING_SAMPLE_RATEパフォーマンス追跡率(0.0-1.0)
本番環境のログファイル
ファイル内容
logs/web.error.logHTTP エラー(supervisor)
logs/web.logGunicorn の標準出力
logs/worker.error.logバックグラウンドジョブのエラー
logs/frappe.logデフォルトの frappe ロガー
logs/frappe.web.logHTTP リクエストのメタデータ
logs/monitor.json.logパフォーマンスメトリクス(JSON)
sites/{site}/logs/*.logサイトごとのアプリケーションログ

アンチパターン

絶対にしない必ず行う理由
print("debug info")frappe.logger("mod").info(...)print() は本番環境では出力されません
frappe.log_error("info msg")frappe.logger().info(...)log_error は Error Log ドキュメントを作成し、管理 UI が煩雑になります
frappe.logger()(モジュール指定なし)frappe.logger("my_module")モジュールを指定しないと、フレームワークのログと混在します
frappe.log_error(title, msg) の位置引数frappe.log_error(title=t, message=m)位置引数は順序が入れ替わる可能性があります(既知の問題)
パスワードやトークンを記録する機密データをマスクするSiteContextFilter がマスクするのは form_dict のみです
本番環境で frappe.log() を使うfrappe.logger() を使うfrappe.log() はデバッグ専用で、リクエストスコープです
本番環境で logging=2 のままにするデバッグ中のみ使用するすべての SQL クエリが記録され、大量の I/O が発生します

バージョンによる違い

機能v14v15+
frappe.logger()ありあり
frappe.log_error()あり+ defer_insert kwarg
Error Log の trace_id--追加
Error Log のメタデータ--JSON 形式のリクエスト/ジョブコンテキスト
エラースナップショットファイルベース + スケジュールされた収集DB に直接挿入
Sentry との統合基本機能強化(DB モニタリング、プロファイリング)
guess_exception_source()--エラーの原因となったアプリを特定
FRAPPE_STREAM_LOGGINGありあり

参考ファイル

コメント