logging-guidelineslisted
Install: claude install-skill devbasex/ai-plugins
# ログ運用ガイドライン
コードにログを追加・修正する際は、以下のルールに従うこと。言語/フレームワークに依存しない原則として記述している。
## ログレベルの選択基準
| レベル | 用途 | 本番出力(推奨) |
|--------|------|---------------|
| `error` | 例外発生、処理失敗 | o |
| `warning` | データ不備でスキップ、処理継続可能な異常 | o |
| `info` | バッチ開始/完了、重要なビジネスイベント | 環境による(本番off推奨) |
| `debug` | 開発向けデバッグ情報 | x |
**推奨**: 本番は `LOG_LEVEL=warning` 以上。info/debug は開発・ステージングのみで出力する。
## 使用を避けるログレベル
以下は用途が曖昧または過剰なため、明示的な運用規則がない限り使わない:
- `notice` — error/warning/info と区別が曖昧
- `critical`, `alert`, `emergency` — 通常のアプリには過剰。運用規則として「PagerDuty起動基準」などが定義されていない限り使わない
## ループ内ログのルール
### 原則: ループ内では info/warning を出力しない
ループ内で1件ずつログを出力すると、大量データ処理時にログが爆発する。ループ後にサマリーとしてまとめて出力すること。
### サマリーログ化パターン(擬似コード)
```
# NG: ループ内で1件ずつ出力
for item in items:
log.info("処理完了", id=item.id)
# OK: ループ後にまとめて出力
processed_count = 0
for item in items:
# 処理...
processed_count += 1
log.info("バッチ処理完了", processed_count=processed_count)
```
### エラー蓄積パターン
ループ内で例外が発生し処理を継続する場合は、エラー情報を蓄積してループ後にまとめて報告する。先頭N件のみ含めることで、ログサイズ爆発を防ぐ。
```
errors = []
for item in items:
try:
process(item)
except Exception as e:
errors.append({"id": item.id, "error": str(e)})
if errors:
log.error(
"処理で一部失敗",
total_count=len(items),
failed_count=len(errors),
sample_errors=errors[:10], # 先頭10件のみ
)
```
### ループ内 debug も必要最小限
ループ内での debug 出力は、他に代替手段がなく調査に不可欠な場合のみ許容。デフォルトは「ループ外で件数サマリ」を基本とする。
## 例外処理のルール
1. **例外は最上位でログ出力** — エントリポイント(コマンド/コントローラー/ジョブ)で catch してログ出力
2. **再スロー時はログ不要** — 上位で��