2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Node.js 最速・パフォーマンス重視のロガー pino

2
Last updated at Posted at 2025-07-07

目次

  1. pinoとは?
  2. 代表的なロガー
  3. pinoを使うメリット、デメリット
  4. まとめ
  5. 参考文献

🧷 pinoとは?

pinoは、パフォーマンスを最優先に設計されたNode.js向けのロガーライブラリです。
最大の特徴は、「速さ」 にあります。

  • ログメッセージを非同期で処理し、JSON形式での出力に特化
  • ロギング処理がアプリケーションのメインスレッドをブロックするのを最小限に抑え、アプリケーション全体のパフォーマンス低下を防止

特に、大量のログを高速に処理する必要があるマイクロサービスや、リソースが限られたサーバーレス環境などで真価を発揮します。

🧷 代表的なロガー

Node.jsでは、pino以外にも広く使われているロガーライブラリが存在します。

  • Winston
    • 非常に多機能で、柔軟なカスタマイズが可能なロガー
    • 複数の出力先(コンソール、ファイル、データベースなど)を組み合わせる「トランスポート」機能が強力
  • Bunyan
    • pinoと同様に、構造化されたJSON形式のログ出力を基本とするロガー
    • Netflixなどで採用実績あり

これらのロガーも素晴らしいツールですが、「パフォーマンス」 という点においてはpinoに軍配が上がります。
ベンチマークによると、pinoは1秒間に30,000行以上のログを問題なく記録可能。(winstonよりも約10倍高速)

🧷 pinoを使うメリット、デメリット

メリット

1. 圧倒的なパフォーマンス

  • 他のロガーライブラリと比較して、非常に高速かつ低オーバーヘッド
  • 非同期I/Oと効率的なJSONシリアライズにより、本番環境でのパフォーマンス影響を最小限に抑える
  • デフォルトで非同期にログを書き込む = メインスレッドを占有しない

2. 構造化ロギング

  • ログをJSON形式で出力するため、DatadogCloudWatchといったログ集約プラットフォームでの集計や分析が容易

3. 軽量性

  • 意図的に軽量に作られており、CPUやメモリの消費量が少ないため、リソースが限られた環境でも安心して利用可能

デメリット

1. 可読性

  • 開発中にコンソールでログを確認する場合、整形されていないJSONの読みづらさがあります。pino-prettyというツールを使うことで、読みやすい形式に変換可能

2. 柔軟性のためには要追加設定

  • Winstonのように、設定オブジェクト一つでファイル書き出しや複数トランスポートを同時に定義するような柔軟性はない

  • ファイルへの出力やログローテーションを行いたい場合は、専用のトランスポートライブラリと組み合わせて実現する必要がある

    • ログローテーション
      ログファイルが肥大化するのを防ぐために、一定のサイズや期間で古いログを新しいログに切り替える仕組み

他の代表的なロガーとの比較

特徴 pino Winston Bunyan
パフォーマンス ◎ 非常に高速 △ 柔軟な分、速度は劣る ◯ 高速
メモリ使用量 ◎ 非常に少ない △ 機能が多い分、消費量も多い ◯ 少ない
出力形式 JSON (特化) 複数形式に対応 JSON (基本)
柔軟性・拡張性 ◯ (プラグインで拡張) ◎ 非常に高い
フォーマッティング pino-pretty Built-in Pretty-json
TypeScriptとの相性 ◎ 非常に良い ◯ 良い △ 悪い
主な用途 パフォーマンス重視のAPI、マイクロサービス 多様な出力先が必要なアプリケーション 構造化ログが必要なシステム
import pino, { Logger } from 'pino';

// pinoのインスタンスを作成 (型はLogger)
const logger: Logger = pino();

// 各レベルでログを出力
logger.info('情報ログ');
logger.warn('警告ログ');
logger.error('エラーログ');

// 型を定義してオブジェクトを渡す
interface User {
  name: string;
  role: 'admin' | 'guest';
}

const user: User = { name: 'X', role: 'admin' };
logger.info({ user }, 'User Login'); // { user: User }

🧷 まとめ

pinoは、Node.jsアプリケーションのパフォーマンスを損なうことなく、効率的なロギングを実現したい場面で推奨できるロガーになります。

  • とにかく速いロガーが欲しい
  • ログはJSON形式で管理したい
  • マイクロサービスやサーバーレス環境で使いたい

🧷 参考文献

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?