Node.js+winstonでログに実際に出力するメッセージやメタデータを作成する
ログを出力するには下のようなモジュールを利用する方法があります。
log
npmlog
bunyan
winston
log4js
この記事ではwinston
モジュールを利用する方法を取り上げます。
winston
モジュールの基本的な使用方法に関しては下の記事を参照してください。
winstonモジュール
フィルタとリライタ
winston
モジュールでログに出力するメッセージやメタデータとして渡されたものから実際に出力するメッセージやメタデータを作成するにはwinston.Logger
クラスのコンストラクタの第1引数のオプションにfilters
オプションやrewriters
オプションを指定します。
filters
オプションにはメッセージを作成するための1個以上の関数(フィルタ)を配列として指定します。
rewriters
オプションにはメタデータを作成するための1個以上の関数(リライタ)を配列として指定します。
フィルタやリライタの第1引数はレベルであり、第2引数はメッセージであり、第3引数はメタデータです。
また、フィルタでは返り値としてログに実際に出力するメッセージを返すようにし、リライタではメタデータを返すようにします。
ただし、filters
オプションやrewriters
オプションに2個以上のフィルタやリライタを指定した場合にはそれらのフィルタやリライタは順番に適用されます。
var winston = require('winston');
var logger = new winston.Logger({
rewriters: [
function (level, msg, meta) {
return 'xxx';
},
function (level, msg, meta) {
return 'yyy';
}
],
filters: [
function (level, msg, meta) {
return { foo: 'aaa', bar: 'bbb' }
},
function (level, msg, meta) {
return { baz: 'ccc', qux: 'ddd' }
}
]
});
なお、フィルタやリライタはlogger.filters
プロパティやlogger.rewriters
プロパティに配列として格納されます。
var filters = logger.filters;
var rewriters = logger.rewriters;
サンプルコード1
winston-filters-rewriters.js
var winston = require('winston');
var logger = new winston.Logger({
transports: [
new winston.transports.Console({
name: 'main'
})
],
filters: [
function(level, msg, meta) {
return '** ' + msg;
},
function(level, msg, meta) {
return msg + ' **';
}
],
rewriters: [
function(level, msg, meta) {
meta.foon = '?? ' + meta.foo;
return meta;
},
function(level, msg, meta) {
meta.foon = meta.foon + ' ??';
return meta;
},
function(level, msg, meta) {
delete meta.foo;
return meta;
}
]
});
winston.info('this is message.', { foo: 'this is metadata.' });
logger.info('this is message.', { foo: 'this is metadata.' });
使用パッケージ
- winston
npm install winston
でインストールします。
実行結果
C:\work\node>node winston-filters-rewriters.js
info: this is message. foo=this is metadata.
info: ** this is message. ** foon=?? this is metadata. ??
関連
