Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

go-logging

Goでのロギング手法の選定、`slog`の設定、構造化ログの記述、ログレベルの決定が必要な場合に使用します。ユーザーが明示的に言及していなくても、本番環境向けロギングのセットアップ、リクエストスコープのコンテキストをログへ付加する処理、`log`から`slog`への移行時にも適用されます。エラーハンドリング戦略はカバーしません(`go-error-handling`を参照)。

description の原文を見る

Use when choosing a logging approach, configuring slog, writing structured log statements, or deciding log levels in Go. Also use when setting up production logging, adding request-scoped context to logs, or migrating from log to slog, even if the user doesn't explicitly mention logging. Does not cover error handling strategy (see go-error-handling).

SKILL.md 本文

Go ロギング

基本原則

ログはオペレーターのためのものであり、開発者のためではありません。すべてのログ行は、本番環境の問題を診断するのに役立つべきです。その目的を果たさないなら、それはノイズです。


ロガーの選択

規範的: 新しい Go コードには log/slog を使用してください。

slog は構造化され、レベル付けされ、標準ライブラリに含まれています (Go 1.21+)。本番ロギングのニーズの大多数をカバーします。

どのロガーを使う?
├─ 新しい本番コード      → log/slog
├─ 簡単な CLI / 一度限り  → log (標準)
└─ 測定で確認されたパフォーマンスボトルネック → zerolog または zap (まずベンチマーク)

プロファイリングで slog がホットパスのボトルネックであることが示されない限り、サードパーティのロギングライブラリを導入しないでください。導入する場合は、同じ構造化キー値スタイルを維持してください。

slog ハンドラの設定、JSON/テキスト出力の構成、または log.Printf から slog への移行を行う場合は、references/LOGGING-PATTERNS.md を参照してください。


構造化ロギング

規範的: 常にキー値ペアを使用してください。メッセージ文字列に値を挿入しないでください。

メッセージは、何が起こったかの静的な説明です。動的データはキー値属性に入ります:

// 良い例: 静的なメッセージ、構造化フィールド
slog.Info("order placed", "order_id", orderID, "total", total)

// 悪い例: メッセージ文字列に焼き込まれた動的データ
slog.Info(fmt.Sprintf("order %d placed for $%.2f", orderID, total))

キー命名

助言的: ログ属性キーには snake_case を使用してください。

キーは小文字でアンダースコア区切りであり、コードベース全体で一貫していることが必要です: user_id, request_id, elapsed_ms

型付き属性

パフォーマンスクリティカルなパスの場合は、型付きコンストラクタを使用してアロケーションを回避します:

slog.LogAttrs(ctx, slog.LevelInfo, "request handled",
    slog.String("method", r.Method),
    slog.Int("status", code),
    slog.Duration("elapsed", elapsed),
)

ログパフォーマンスの最適化や Enabled() での事前チェック時は、references/LEVELS-AND-CONTEXT.md を参照してください。


ログレベル

助言的: これらのレベルセマンティクスに一貫して従ってください。

レベル使用するとき本番環境デフォルト
Debug開発者のみの診断、内部状態のトレーシング無効
Info注目すべきライフサイクルイベント: 起動、シャットダウン、設定読み込み有効
Warn予期しないが復旧可能: 非推奨機能の使用、リトライ成功有効
Error操作失敗、オペレーター対応が必要有効

経験則:

  • 誰も対応する必要がなければ、Error ではなく Warn または Info を使用してください
  • デバッガを接続した場合のみ有用な場合は、Debug を使用してください
  • slog.Error には常に "err" 属性が含まれるべきです
slog.Error("payment failed", "err", err, "order_id", id)
slog.Warn("retry succeeded", "attempt", n, "endpoint", url)
slog.Info("server started", "addr", addr)
slog.Debug("cache lookup", "key", key, "hit", hit)

Warn と Error の区別やカスタム詳細度レベルの定義については、references/LEVELS-AND-CONTEXT.md を参照してください。


リクエストスコープログ

助言的: コンテキストからロガーを派生させて、リクエストスコープフィールドを保持します。

ミドルウェアを使用してロガーをリクエスト ID、ユーザー ID、またはトレース ID で充実させ、充実されたロガーをコンテキストまたは明示的なパラメータを通じて下流に渡します:

func middleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        logger := slog.With("request_id", requestID(r))
        ctx := context.WithValue(r.Context(), loggerKey, logger)
        next.ServeHTTP(w, r.WithContext(ctx))
    })
}

そのリクエスト内の後続のすべてのログ呼び出しは request_id を自動的に保持します。

ロギングミドルウェアの実装またはコンテキストを通じたロガーの受け渡しについては、references/LOGGING-PATTERNS.md を参照してください。


ログまたは返却、両方ではなく

規範的: 各エラーを正確に 1 回処理します — ログするか返却するか、どちらかです。

エラーをログしてからそれを返却すると、呼び出し元がスタック上で同様に処理するため、重複ノイズが生じます。

// 悪い例: ここでログされ、スタック上のすべての呼び出し元でもログされる
if err != nil {
    slog.Error("query failed", "err", err)
    return fmt.Errorf("query: %w", err)
}

// 良い例: ラップして返却 — 呼び出し元が判断させる
if err != nil {
    return fmt.Errorf("query: %w", err)
}

例外: HTTP ハンドラおよびその他のスタック上位の境界は、詳細なエラーをサーバー側でログしながら、サニタイズされたメッセージをクライアントに返却することができます:

if err != nil {
    slog.Error("checkout failed", "err", err, "user_id", uid)
    http.Error(w, "internal error", http.StatusInternalServerError)
    return
}

ハンドル一度パターンとエラーラッピングガイダンスの完全については、go-error-handling を参照してください。


ログを取らないもの

規範的: シークレット、認証情報、PII、または高カーディナリティ無制限データを決してログに取らないでください。

  • パスワード、API キー、トークン、セッション ID
  • クレジットカード番号全体、SSN
  • ユーザーデータを含むリクエスト/レスポンスボディ
  • 無制限サイズのスライスまたはマップ全体

ログ属性に含めるのが安全なデータを決定する場合は、references/LEVELS-AND-CONTEXT.md を参照してください。


クイックリファレンス

するしない
slog.Info("msg", "key", val)log.Printf("msg %v", val)
静的メッセージ + 構造化フィールドメッセージ内の fmt.Sprintf
snake_case キーcamelCase または一貫性のないキー
エラーをログするか返却する同じエラーをログしかつ返却する
コンテキストからロガーを派生させる呼び出しごとに新しいロガーを作成する
"err" 属性を使用して slog.Error を使用するエラーに対して slog.Info を使用する
ホットパス上で Enabled() を事前チェックする常にログ引数を割り当てる

関連スキル

  • エラーハンドリング: エラーをログするか返却するかの判断、またはハンドル一度パターンについては、go-error-handling を参照してください
  • コンテキスト伝播: コンテキストを通じてリクエストスコープ値 (ロガーを含む) を渡すときは、go-context を参照してください
  • パフォーマンス: ホットパスロギングの最適化またはログ呼び出しのアロケーション削減については、go-performance を参照してください
  • コードレビュー: Go PR でのロギング慣行のレビュー時は、go-code-review を参照してください

ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
cxuu
リポジトリ
cxuu/golang-skills
ライセンス
Apache-2.0
最終更新
不明

Source: https://github.com/cxuu/golang-skills / ライセンス: Apache-2.0

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: cxuu · cxuu/golang-skills · ライセンス: Apache-2.0