mcpField
P
pino-logging

pino-logging

github.com/oakoss開発20196 回インストール10 週間前に更新
リポジトリ

pino-logging について

Node.js 向けの高性能 JSON ロガー Pino の利用ガイドです。構造化ログ、リクエスト単位のコンテキスト、機密情報のマスキング、トランスポート設定を扱います。

主な機能

  1. 01構造化 NDJSON ログ
  2. 02リクエスト単位の子ロガー
  3. 03機密フィールドのマスキング
  4. 04ワーカースレッドでの転送
  5. 05HTTP・フレームワークのログ

活用シーン

  1. 01Node.js サービスへの構造化ログ導入
  2. 02リクエストログへの相関 ID 付与
  3. 03パスワードやトークンのマスキング
  4. 04複数の出力先へのログ振り分け

インストール

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

$npx skills add https://github.com/oakoss/agent-skills --skill pino-logging

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
child-loggers-and-redaction.md
http-and-frameworks.md
setup-and-configuration.md
transports.md

詳細

Pino ロギング

Node.js 向けの高性能 JSON ロガーです。トランスポートはワーカースレッドで実行され、メインのイベントループを解放します。デフォルトで NDJSON を出力し、level、time、pid、hostname、msg フィールドを自動的に付与します。

使用する場面: Node.js アプリケーションでの構造化ロギング、相関 ID を使ったリクエスト単位のロギング、機密データのマスキング、複数の出力先へのログ振り分け、フレームワークのロギング連携。

使用しない場面: ブラウザーのみでのロギング(pino のブラウザーサポートは限定的です)、開発中のシンプルな console.log によるデバッグ、デフォルトで人間が読みやすいログが必要なプロジェクト(pino は JSON を出力します。開発時には pino-pretty を使用してください)。

パッケージ: pino(v10+)

クイックリファレンス

パターンAPI主なポイント
基本的なロガーpino()デフォルト:レベルは info、JSON を stdout に出力
レベルの設定pino({ level: 'debug' })fatal > error > warn > info > debug > trace
コンテキスト付きのログlogger.info({ userId }, 'msg')第 1 引数はマージされるオブジェクト、第 2 引数はメッセージ
エラーログlogger.error({ err }, 'failed')シリアライズするため、エラーは err キーで渡します
子ロガーlogger.child({ requestId })バインディングはすべての子ログで維持されます
マスキングpino({ redact: ['password'] })パスにはドット記法を使い、ワイルドカードもサポートします
トランスポート(ワーカー)pino({ transport: { target } })ワーカースレッドで実行され、ブロッキングしません
複数のトランスポートtransport: { targets: [...] }出力先ごとに異なるレベルを設定できます
Pretty 出力(開発時)target: 'pino-pretty'開発時のみ — 本番環境では使用しないでください
ファイルトランスポートtarget: 'pino/file'mkdir オプション付きの組み込み機能
ローテーションファイルtarget: 'pino-roll'サイズおよび時間に基づくローテーション
HTTP ミドルウェアpinoHttp() from pino-httpリクエスト/レスポンスを自動的に記録
リクエスト IDpino-http の genReqId オプションX-Request-Id を生成または転送
シリアライザーserializers: { req, res, err }ログ出力前にオブジェクトを変換
フォーマッターformatters: { level, log }フィールド名を変更し、出力を変換
カスタムレベルcustomLevels: { http: 35 }組み込みレベルの間にレベルを追加
非同期の出力先pino.destination({ sync: false })バッファリングされた非同期書き込み
Fastifyfastify({ logger: true })pino を組み込み、request.log を使用
Honohono-pino ミドルウェアハンドラー内で c.get('logger') を使用

よくある間違い

間違い対処法
本番環境で pino-pretty を使用する本番環境では JSON 出力を使用し、開発環境でのみ transport を使って整形します
機密データ(トークン、パスワード)をログに記録する機密フィールドへのパスを指定して redact オプションを使用します
リクエストごとに新しいロガーを作成するリクエスト単位のコンテキストには logger.child({ requestId }) を使用します
ファイルへの書き込みでメインスレッドをブロックするpino.transport() を使用します。ワーカースレッドで実行されます
エラーに JSON.stringify を使用するエラーは { err } として渡します。pino がスタックと原因のチェーンをシリアライズします
X-Request-Id ヘッダーを転送しないpino-http の genReqId を使用して、まずヘッダーを確認します
負荷の高いループ内でログを記録するコストのかかる処理の前に logger.isLevelEnabled('debug') を確認します
transport で fetch-depth: 0 を指定し忘れるtransport は別パッケージです。依存関係としてインストールします

委任

hono スキルが利用可能な場合は、Hono のミドルウェアとルーティングのパターンを委任してください。 vitest-testing スキルが利用可能な場合は、テストのセットアップとモックのパターンを委任してください。 sentry-setup-logging スキルが利用可能な場合は、Sentry との統合を委任してください。このスキルでは、pino のログを Sentry に転送する Sentry.pinoIntegration() を扱います。 それ以外の場合は、次を推奨してください:pnpm dlx skills add getsentry/sentry-for-claude -s sentry-setup-logging -a claude-code -y

参考資料

コメント