Skip to content

Instantly share code, notes, and snippets.

@yukikim
Created November 14, 2024 11:57
Show Gist options
  • Save yukikim/0d876e4d25323321b6bffa39168d9238 to your computer and use it in GitHub Desktop.
Save yukikim/0d876e4d25323321b6bffa39168d9238 to your computer and use it in GitHub Desktop.
node ログ管理

Node.js でログ管理をするためのおすすめのモジュールとしては、winstonpinoがよく使われます。それぞれの特徴と基本的な使い方について解説します。

1. winston の概要と使い方

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()
  ]
});

2. pino の概要と使い方

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-pretty による出力の整形

pino の JSON 出力を見やすくするため、pino-pretty を使って整形できます。インストールして利用します。

npm install pino-pretty

使用例

const logger = pino({
  transport: {
    target: 'pino-pretty',
    options: {
      colorize: true
    }
  }
});

まとめ

  • winston: 様々な出力先に対応しており、カスタマイズ性が高いです。複数のログ形式に対応し、管理がしやすいです。
  • pino: 高速で、シンプルなJSON形式のログ出力を重視する場合に向いています。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment