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
と記録されます。