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を使った事がないのにテキトーなことを書く)