UTALI

書き溜めておいた技術記事や旅行記のバックアップです。

Node.jsのログ取得にはwinstonがオススメ

www.npmjs.com

Expressでデフォルトで利用できるロガーと比較して多機能なWinstonをおすすめします。

Winstonはログの種類によるログファイルへの出力の振り分けや、データベースへの書き出しにも対応しています。

例えば、通常のログファイルはローカルのファイルに書き出す一方で、エラーログに限定してリモートのデータベースに保存するような使用法も可能になっています。

導入

sudo npm i winston --save
  
  
const winston = require('winston');

ログのレベルの振り分け

ログはそのレベルによって分類が可能なように RFC5424 の規格で定められています。

そのレベルは

{ error: 0, warn: 1, info: 2, verbose: 3, debug: 4, silly: 5 }

となっています。低いレベルを設定したロガーは、そのレベルよりも高いロガーのログ出力を全て受け付けます。

例として、デフォルトの設定を利用して最も単純なケースを見てみます。

ロガーを初期化するには以下のような設定を行います。

const logger = new (winston.Logger) ({
  transports: [
    new (winston.transports.File) ({
      filename: 'error.log',
      level: 'error'
    })
  ]});

このときerror.logのレベルはerrorですので、errorよりもレベルの高いログが全て記録されます。

例えば、

const kinston = require('winston');
winston.lnfo('Info');
winston.error('error');

とすると、error.logには

Info 
error

と記録されます。