winstonでログローテーションする

node.jsのロギングモジュール、winstonでログローテーションが簡単に出来ることがわかったのでメモ。

どうもDailyRotateFileというTransportsがいつの間にか追加されていたらしい。added dailyRotateFile transport. #205

$ npm install winston

コードは以下のような感じ。

var winston = require('winston');

winston.add(winston.transports.DailyRotateFile, {
  filename: 'winston.log-',
  datePattern: 'yyyy-MM-dd'
});
winston.remove(winston.transports.Console);

winston.info('log');

DailyRotateFileを追加して、デフォルトのConsoleを削除する。(別のインスタンスを生成してそこに追加する方が良いのかも)

DailyRotateFileにはオプションが渡せて、filenameとかdatePatternなどが指定できる。この場合はwinston.log-2014-11-18のようなファイル名で出力される。

ソースコードを見た感じだと指定できるのは以下のオプションになるのかな。

  • json
  • colorize
  • maxsize
  • maxFiles
  • prettyPrint
  • timestamp
  • datePattern

出力は以下のようになる。jsonがデフォルトでtrueになっていて、falseにしていないのでJSONで出力される。

{"level":"info","message":"log","timestamp":"2014-11-18T03:40:12.498Z"}

ログローテーションってログの削除も含めてのことだと思ってたのだけど、ログを複数ファイルに分けて出力することだったらしい。

これだと古くなったログを削除する必要がある気がする。まあ、ログが大きくなるのが気になるのだったら何らかの方法で fluentd とかに渡す方が管理とかの面でも良いのかもしれないけど。(と、fluentdを使った事がないのにテキトーなことを書く)