1日1パッケージ pino — Node.jsプロジェクトで信頼できるロガー
By hungpd, at: 2025年6月8日18:25
Estimated Reading Time: __READING_TIME__ minutes
![[One Package Per Day] pino - The Logger We Trust in Node.js Projects](/media/filer_public_thumbnails/filer_public/ad/85/ad854393-ffb3-4df5-8289-a75820e66da7/pino_logging_-_nodejs.png__1500x900_crop_subsampling-2_upscale.png)
![[One Package Per Day] pino - The Logger We Trust in Node.js Projects](/media/filer_public_thumbnails/filer_public/ad/85/ad854393-ffb3-4df5-8289-a75820e66da7/pino_logging_-_nodejs.png__400x240_crop_subsampling-2_upscale.png)
堅牢なNode.jsアプリケーションを構築する際に、ロギングは最も過小評価されているスーパーヒーローの1つです。デバッグ中に私たちを救い、本番環境でのバグの追跡に役立ち、システムの動作に関する重要な可観測性を提供します。
長年にわたり、console.log
(はい、私もです)からwinston、bunyanまで、多くのロガーを試してきました。しかし、ここ数年、1つのパッケージが私たちの全幅の信頼を得ています。pinoです。
速度、構造、シンプルさを求めているなら、これ以上探す必要はありません。
pinoとは何か?
pino(イタリア語で「松」を意味します)は、Node.js用の超高速JSONロガーです。パフォーマンスと構造化されたログが重要な本番環境での使用を目的として設計されています。
町で最速のロガーであると主張しており、ネタバレになりますが、その通りです。
すべてのNodeプロジェクトでpinoを使用する理由
1. 驚くほど高速
ベンチマークによると、pinoは1秒間に30,000行以上のログを問題なく記録できます。これは多くの場合、winstonよりも10倍高速です。パフォーマンスを気にするのであれば(気にするべきです)、これは画期的なことです。
const pino = require('pino');
const logger = pino();
logger.info('Hello world');
これは、朝のコーヒーが効き始めるよりも速く動作します。
2. 構造化ロギング(JSON FTW)
pinoはすべてのログをJSON形式で出力します。最初はうるさく感じるかもしれませんが、次のようなログ集約プラットフォームにとって非常に役立ちます。
出力例:
{
"level": 30,
"time": 1717481229491,
"pid": 9094,
"hostname": "glinteco-dev",
"msg": "Server started on port 3000"
}
構造化されたログ=検索可能なログ=より良いデバッグ。
3. TypeScriptと美しく連携
TypeScriptを使用している場合、pinoはすぐに使える型を提供し、ログレベル、カスタムシリアライザー、ログメソッドとよく統合されます。独自のログインターフェースを定義して構造を強制することもできます。
4. 本番環境でのオーバーヘッドが少ない
pinoはデフォルトで非同期にログを書き込みます。つまり、メインスレッドをブロックしません。本番環境でパフォーマンスを低下させないため、開発中はCLIツールpino-prettyを使用してログをパイプ処理することを推奨しています。
開発環境:
node app.js | pino-pretty
本番環境:
node app.js >> logs.json
効率的でスマートです。
5. 柔軟性と拡張性
-
機密フィールドを削除したい場合?
-
カスタムシリアライザーが必要な場合?
-
異なるモジュール用の子ロガーが必要な場合?
-
ファイル、stdout、または外部ストリームにログを出力したい場合?
pinoは、成長するアプリケーションに合わせてスケーリングできるほど汎用性があります。
Glintecoにおける一般的な設定
// logger.ts
import pino from 'pino';
export const logger = pino({
level: process.env.LOG_LEVEL || 'info',
redact: ['req.headers.authorization'], // シークレットを隠す
transport:
process.env.NODE_ENV === 'development'
? {
target: 'pino-pretty',
options: { colorize: true },
}
: undefined,
});
その後、任意のファイルで:
import { logger } from
'./logger';
logger.info('App is starting...');
pino vs winston vs bunyan
最後に
ロギングは後回しにしてはいけません。いつか本番環境に到達する可能性のあるNode.jsで何かを構築している場合、自分自身のために1つのことをしてください。console.log
を捨ててpinoをインストールしましょう。
高速で、構造化されており、信頼性があります。私たちが信頼するロガーです。