Node.js でログ管理をするためのおすすめのモジュールとしては、winston
とpino
がよく使われます。それぞれの特徴と基本的な使い方について解説します。
winston
は、柔軟で多機能なロガーライブラリで、以下の特徴があります。
- ログレベル: デフォルトで6つのログレベル(error, warn, info, http, verbose, debug)が用意されており、目的に応じたログの詳細度を設定できます。
- トランスポート: ログをファイル、コンソール、データベースなど、複数の場所に出力できます。
- フォーマット: JSON形式や独自フォーマットなどでログを出力できます。
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.Console(),
// ファイルに出力
new winston.transports.File({ filename: 'combined.log' })
]
});
// ログ出力
logger.info('情報メッセージ');
logger.warn('警告メッセージ');
logger.error('エラーメッセージ');
level
プロパティを変えることで、出力されるログの詳細度を設定できます。例えば、level: 'debug'
と設定すると、debug
レベルまでのログが全て出力されます。
例えば、ログの出力を見やすくするために、フォーマットを工夫することができます。
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.colorize(),
winston.format.simple()
),
transports: [
new winston.transports.Console()
]
});
pino
はパフォーマンスが非常に高く、軽量なログライブラリです。シンプルなAPIで、JSON形式のログ出力に最適化されています。以下の特徴があります。
- 高速: シリアライズ処理が高速で、大量のログ出力に向いています。
- JSON形式: デフォルトでJSON形式で出力され、データ解析ツールとの相性が良いです。
- アシンクトランスポート: データを別プロセスに送信する機能を持ち、さらに処理を効率化できます。
npm install pino
import pino from 'pino';
// ロガーの設定
const logger = pino({
level: 'info',
transport: {
target: 'pino-pretty'
}
});
// ログ出力
logger.info('情報メッセージ');
logger.warn('警告メッセージ');
logger.error('エラーメッセージ');
pino
も同様に、level
オプションでログの詳細度を変更できます。例えば、level: 'debug'
を指定すると、debug
レベルまでのログが出力されます。
pino
の JSON 出力を見やすくするため、pino-pretty
を使って整形できます。インストールして利用します。
npm install pino-pretty
const logger = pino({
transport: {
target: 'pino-pretty',
options: {
colorize: true
}
}
});
- winston: 様々な出力先に対応しており、カスタマイズ性が高いです。複数のログ形式に対応し、管理がしやすいです。
- pino: 高速で、シンプルなJSON形式のログ出力を重視する場合に向いています。