logging-best-practices
ワイドイベント(カノニカルログライン)を中心としたロギングのベストプラクティスを提供し、強力なデバッグと分析を可能にします。
description の原文を見る
Logging best practices focused on wide events (canonical log lines) for powerful debugging and analytics
SKILL.md 本文
ロギングベストプラクティススキル
バージョン: 1.0.0
目的
このスキルは、アプリケーションで効果的なロギングを実装するためのガイドラインを提供します。ワイドイベント(正規ログラインとも呼ばれる)に焦点を当てています。これはリクエストごとサービスごとに単一の文脈豊富なイベントを発行するパターンで、強力なデバッグと分析を実現します。
適用時期
以下の場合にこれらのガイドラインを適用してください:
- ロギングコードを書いたり、レビューしたりする場合
- console.log、logger.info またはそれ以外を追加する場合
- 新しいサービスのロギング戦略を設計する場合
- ロギングインフラストラクチャをセットアップする場合
コアプリンシプル
1. ワイドイベント(最重要)
リクエストごとサービスごとに1つの文脈豊富なイベントを発行します。ハンドラー全体にログ行を散らすのではなく、リクエスト完了時に発行される単一の構造化イベントにすべてを統合してください。
const wideEvent: Record<string, unknown> = {
method: 'POST',
path: '/checkout',
requestId: c.get('requestId'),
timestamp: new Date().toISOString(),
};
try {
const user = await getUser(c.get('userId'));
wideEvent.user = { id: user.id, subscription: user.subscription };
const cart = await getCart(user.id);
wideEvent.cart = { total_cents: cart.total, item_count: cart.items.length };
wideEvent.status_code = 200;
wideEvent.outcome = 'success';
return c.json({ success: true });
} catch (error) {
wideEvent.status_code = 500;
wideEvent.outcome = 'error';
wideEvent.error = { message: error.message, type: error.name };
throw error;
} finally {
wideEvent.duration_ms = Date.now() - startTime;
logger.info(wideEvent);
}
2. 高カーディナリティ & 高次元性(最重要)
高カーディナリティ(ユーザーID、リクエストID - 数百万の一意な値)と高次元性(イベントごとの多くのフィールド)を持つフィールドを含めてください。これにより、特定のユーザーで照会し、まだ予想していない質問に答えることができます。
3. ビジネスコンテキスト(最重要)
常にビジネスコンテキストを含めてください:ユーザーのサブスクリプション層、カート値、フィーチャーフラグ、アカウント年齢。目標は「プレミアム顧客が$2,499の購入を完了できなかった」を知ることであり、単に「チェックアウトが失敗した」ではなく。
4. 環境特性(最重要)
すべてのイベントに環境とデプロイメント情報を含めてください:コミットハッシュ、サービスバージョン、リージョン、インスタンスID。これにより、問題をデプロイメントと相関させ、リージョン固有の問題を特定できます。
5. 単一のロガー(高)
スタートアップで設定された1つのロガーインスタンスを使用し、どこにでもインポートしてください。これにより、一貫したフォーマットと自動的な環境コンテキストが確保されます。
6. ミドルウェアパターン(高)
ミドルウェアを使用してワイドイベントインフラストラクチャ(タイミング、ステータス、環境、発行)を処理してください。ハンドラーはビジネスコンテキストのみを追加する必要があります。
7. 構造と一貫性(高)
- JSON フォーマットを一貫して使用する
- サービス間でフィールド名の一貫性を保つ
- ログレベルを
infoとerrorの2つに簡潔にする - 非構造化文字列をログに記録しない
回避すべきアンチパターン
- 散らばったログ:リクエストごとに複数の console.log() 呼び出し
- 複数のロガー:異なるファイルに異なるロガーインスタンス
- 環境コンテキストの欠落:コミットハッシュやデプロイメント情報がない
- ビジネスコンテキストの欠落:ユーザー/ビジネスデータなしで技術的詳細をログに記録
- 非構造化文字列:構造化データの代わりに
console.log('something happened') - スキーマの不一貫性:サービス間で異なるフィールド名
ガイドライン
ワイドイベント (rules/wide-events.md)
- サービスホップごとに1つのワイドイベントを発行する
- すべての関連コンテキストを含める
- リクエストIDでイベントを接続する
- リクエスト完了時にfinally ブロックで発行する
コンテキスト (rules/context.md)
- 高カーディナリティフィールド(user_id、request_id)をサポートする
- 高次元性(多くのフィールド)を含める
- 常にビジネスコンテキストを含める
- 常に環境特性(commit_hash、version、region)を含める
構造 (rules/structure.md)
- コードベース全体で単一のロガーを使用する
- 一貫したワイドイベントにミドルウェアを使用する
- JSON フォーマットを使用する
- スキーマの一貫性を保つ
- ログレベルを info と error に簡潔にする
- 非構造化文字列をログに記録しない
一般的な落とし穴 (rules/pitfalls.md)
- リクエストごとに複数のログ行を回避する
- 未知の未知に対応する設計をする
- サービス間でリクエストIDを常に伝播させる
参考資料:
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- boristane
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/boristane/agent-skills / ライセンス: MIT
関連スキル
hugging-face-trackio
Trackioを使用してMLトレーニング実験を追跡・可視化できます。トレーニング中のメトリクスログ記録(Python API)、トレーニング診断のアラート発火、ログされたメトリクスの取得・分析(CLI)が必要な場合に活用してください。リアルタイムダッシュボード表示、Webhookを使用したアラート、HF Space同期、自動化向けのJSON出力に対応しています。
btc-bottom-model
ビットコインのサイクルタイミングモデルで、加重スコアリングシステムを搭載しています。日次パルス(4指標、32ポイント)とウィークリー構造(9指標、68ポイント)の2カテゴリーにわたる13の指標を追跡し、0~100のマーケットヒートスコアを算出します。ETFフロー、ファンディングレート、ロング/ショート比率、恐怖・貪欲指数、LTH-MVRV、NUPL、SOPR(LTH+STH)、LTH供給率、移動平均倍率(365日MA、200週MA)、週次RSI、出来高トレンドに対応します。市場サイクル全体を通じて買いと売りの両方の推奨を提供します。ビットコインの底値拾い、BTCサイクルポジション、買い時・売り時、オンチェーン指標、MVRV、NUPL、SOPR、LTH動向、ETFの流出入、ファンディングレート、恐怖指数、ビットコインが過熱状態か、マイナーコスト、暗号資産市場のセンチメント、BTCのポジションサイジング、「今ビットコインを買うべきか」「BTCが天井をつけているか」「オンチェーン指標は何を示しているか」といった質問の際にこのスキルを活用します。
protein_solubility_optimization
タンパク質の溶解性最適化 - タンパク質の溶解性を最適化します。タンパク質の特性を計算し、溶解性と親水性を予測し、有効な変異を提案します。タンパク質配列の特性計算、タンパク質機能の予測、親水性計算、ゼロショット配列予測を含むタンパク質エンジニアリング業務に使用できます。3つのSCPサーバーから4つのツールを統合しています。
research-lookup
Parallel Chat APIまたはPerplexity sonar-pro-searchを使用して、最新の研究情報を検索できます。学術論文の検索にも対応しています。クエリは自動的に最適なバックエンドにルーティングされるため、論文の検索、研究データの収集、科学情報の検証に活用できます。
tree-formatting
ggtree(R)またはiTOL(ウェブ)を使用して、系統樹の可視化とフォーマットを行います。系統樹を図として描画する際、ツリーレイアウトの選択、分類学に基づく枝やラベルの色付け、クレードの折りたたみ、サポート値の表示、またはツリーへのオーバーレイ追加が必要な場合に使用してください。系統推定(protein-phylogenyスキルを使用)やドメイン注釈(今後の独立したスキル)には使用しないでください。
querying-indonesian-gov-data
インドネシア政府の50以上のAPIとデータソースに接続できます。BPJPH(ハラール認証)、BOM(食品安全)、OJK(金融適正性)、BPS(統計)、BMKG(気象・地震)、インドネシア中央銀行(為替レート)、IDX(株式)、CKAN公開データポータル、pasal.id(第三者法MCP)に対応しています。インドネシア政府データを活用したアプリ開発、.go.idウェブサイトのスクレイピング、ハラール認証の確認、企業の法的適正性の検証、金融機関ステータスの照会、またはインドネシアMCPサーバーへの接続時に使用できます。CSRF処理、CKAN API使用方法、IP制限回避など、すぐに実行可能なPythonパターンを含んでいます。