winstonを使ってみる(node.jsでログを取る)

node.jsでログを取るときにwinstonを使ってみたのでそのメモ。

まずはnpmコマンドでインストール。

$ npm install winston --save

で、詳しくはGithub上のREADMEを参照するとかなり詳しくかかれているので、それを参照しながら実際にログを取ってみます。

やりたいこととしては、

  • ファイルと標準出力にログを出したい
  • ファイルに記録する際はJSONではなくタイムスタンプとログレベルとメッセージが並ぶ様にしたい
  • 標準出力に表示する際は色を付け、タイムスタンプも表示し、全てのログを記録したい
  • 標準出力に出すか否かは任意にしたい

という設定を仮定してみます。以下の様な形。

var winston = require('winston');
var getLoggerSettings = function(consoleLog) {
var settings = {
transports: [
new winston.transports.File({ filename: "winston.log", json: false})
],
exceptionHandlers: [
new winston.transports.File({ filename: "winston.log", json: false})
]
};
if (consoleLog) {
settings.transports.push(new winston.transports.Console({colorize: true, timestamp: true, level: 'silly'}));
settings.exceptionHandlers.push(new winston.transports.Console({colorize: true, timestamp: true, level: 'silly'}));
}
return settings;
};
var logger = new (winston.Logger)(getLoggerSettings(true));
logger.silly('silly');
logger.debug('debug');
logger.verbose('verbose');
logger.info('info');
logger.warn('warn');
logger.error('error');

こうすることによって、ターミナル上には、

といった形でログが表示されます。また、ログファイル上にも、

2014-10-12T07:19:37.276Z - info: info
2014-10-12T07:19:37.276Z - warn: warn
2014-10-12T07:19:37.276Z - error: error

な形で記録されます。ファイル側にinfo以上のログしか記録されていないのは、new winston.transports.File({ filename: "winston.log", json: false}) としていてログレベルを明記していないので、標準のinfo以上のログが記録されています。

ここでは、標準出力とファイルログだけを対象にしましたが、winston-riakや、winston-mongodbという実装もあるので、ログをデータベースに記録することも容易そう*1

node.jsであれこれ書いてログを取りたいときはしばらく使ってみよう。

*1:見た感じですが...

(Visited 11 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です