mcpField
W
winston

winston

github.com/claude-dev-suite開発4639 回インストール2 日前に更新
リポジトリ

winston について

winston は、Winston のログ設定を行う JavaScript/TypeScript 開発者向けのリファレンススキルです。複数のトランスポート、構造化フォーマット、ログローテーションを扱います。

主な機能

  1. 01複数のトランスポート設定
  2. 02構造化ログ形式の設定
  3. 03カスタムレベルと形式の作成
  4. 04コンテキスト付き子 Logger の追加
  5. 05日付単位のファイルローテーション
  6. 06一般的なログ問題の調査

活用シーン

  1. 01ファイル、コンソール、HTTP へのログ出力
  2. 02リクエストやモジュールのコンテキスト追加
  3. 03本番環境でのログファイル肥大化の抑制
  4. 04ログ欠落や形式異常の調査

インストール

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

$npx skills add https://github.com/claude-dev-suite/claude-dev-suite --skill winston

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

詳細

Winston Logger - クイックリファレンス

このスキルを使用する場面

  • 複数のトランスポート(ファイル、コンソール、HTTP)を使ったロギング
  • カスタムレベルを使った構造化ロギング
  • ログファイルの自動ローテーション

詳細情報:包括的なドキュメントを参照するには、technology: winston を指定して mcp__documentation__fetch_docs を使用してください。

基本設定

npm install winston

重要なパターン

ロガーの基本
import winston from 'winston';

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' }),
  ],
});

// Add console in development
if (process.env.NODE_ENV !== 'production') {
  logger.add(new winston.transports.Console({
    format: winston.format.simple(),
  }));
}
カスタムフォーマット
const customFormat = winston.format.printf(({ level, message, timestamp, ...meta }) => {
  return `${timestamp} [${level.toUpperCase()}]: ${message} ${Object.keys(meta).length ? JSON.stringify(meta) : ''}`;
});

const logger = winston.createLogger({
  format: winston.format.combine(
    winston.format.timestamp(),
    customFormat
  ),
  transports: [new winston.transports.Console()],
});
子ロガー
const childLogger = logger.child({ requestId: req.id, module: 'auth' });
childLogger.info('User authenticated', { userId: user.id });
日次ローテーションファイル
import DailyRotateFile from 'winston-daily-rotate-file';

const transport = new DailyRotateFile({
  filename: 'logs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxSize: '20m',
  maxFiles: '14d',
});

logger.add(transport);

このスキルを使用しない場面

  • 高パフォーマンスの API:代わりに Pino を使用してください。Winston より 10 倍高速です
  • JSON のみのロギング:構造化 JSON 出力には Pino のほうが最適化されています
  • サーバーレス/Lambda:オーバーヘッドを抑えるには、よりシンプルなコンソールロギングまたは Pino を推奨します
  • Python/Java プロジェクト:言語固有のロギングフレームワークを使用してください
  • シンプルなスクリプト:基本的なデバッグには組み込みの console で十分です

アンチパターン

アンチパターン問題点解決策
同期的なファイルロギングイベントループをブロックし、パフォーマンスを低下させます{ stream: ... } を使った非同期トランスポートを使用してください
オブジェクトをシリアライズせずにロギングするデータの代わりに [Object] が記録されることがありますJSON.stringify() または Winston の JSON フォーマットを使用してください
ログローテーションをしない本番環境でディスクがいっぱいになりますwinston-daily-rotate-file を使用してください
頻繁なループ内でロギングするI/O に過剰な負荷がかかり、ディスクがいっぱいになります条件分岐を追加するか、ログをサンプリングしてください
文字列連結無効になっている場合でも常に評価されますフォーマット文字列を使用してください:logger.info('User %s', userId)
エラースタックトレースがないデバッグに必要な情報が失われます{ error: err } または Winston のエラーフォーマットを使用してください

トラブルシューティングのクイックガイド

問題原因解決策
ログが表示されないログレベルの設定が誤っていますlogger.level とトランスポートのレベルを確認してください
パフォーマンスの低下同期的なファイル書き込み非同期トランスポートを使用するか、ログの詳細度を下げてください
ディスクがいっぱいログローテーションがありませんmaxFiles を指定して winston-daily-rotate-file を設定してください
ログに [Object] が表示されるオブジェクトのフォーマットが不適切ですwinston.format.json() または winston.format.prettyPrint() を使用してください
ログが重複する同じ出力先を指すトランスポートが複数ありますトランスポートの設定を確認してください
色が表示されないコンソールトランスポートに colorize がありませんコンソールトランスポートに winston.format.colorize() を追加してください

コメント