Winstonを使用してnode.jsのログを処理するときにログをローテーションする方法を教えてください。つまり、アプリを実行する日ごとに新しいファイルを作成するにはどうすればよいですか?
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)(),
new (winston.transports.File)({ filename: '2012-07-09.log' })
]
});
logger.log('info', 'Test Log Message', { anything: 'This is metadata' });
この機能は存在し、本番環境でwinston.transports.DailyRotateFileを使用しています。
var timeFormatFn = function() {
'use strict';
return moment().format(cfg.timeFormat);
};
var logger = new(winston.Logger)({
exitOnError: false,
transports: [
new(winston.transports.DailyRotateFile)({
filename: cfg.appLogName,
dirname: __dirname + '/../' + cfg.logsDirectory,
datePattern: cfg.rollingDatePattern,
timestamp: timeFormatFn
}),
new(winston.transports.Console)({
colorize: true,
timestamp: timeFormatFn
})
]
});
winston-filerotatedate の著者によると、次のとおりです。
サイズと時間に応じてログファイルをローテーションできるウィンストンのファイルトランスポート。
ファイルトランスポートは、「filename」オプションを介してファイル名を受け入れ、そのファイルをプライマリロギングターゲットとして使用します。ファイルが「maxsize」バイトを超えて大きくなると、現在のログファイルの名前が変更され、新しいプライマリログタイルが作成されます。名前が変更されたログファイルの名前は、「basenameYYYYMMDD [a-z] .bak」という形式になります。
利用可能なオプションは次のとおりです。
- level:このトランスポートが記録するメッセージのレベル。
- silent:出力を抑制するかどうかを示すブールフラグ。
- timestamp:出力にタイムスタンプを付加するかどうかを示すブール値フラグ(デフォルトはtrue)。関数が指定されている場合、タイムスタンプの代わりに戻り値が使用されます。
- filename:出力を書き込むログファイルのファイル名。
- dirname:ログファイルが作成されるフォルダー。
- maxsize:ログファイルの最大サイズ(バイト単位)。サイズを超えると、新しいファイルが作成されます。
- json:trueの場合、メッセージはJSONとしてログに記録されます(デフォルトはtrue)。
2012年12月18日の時点で、この機能はウィンストンで利用できるようになりました( https://github.com/flatiron/winston/pull/205 を参照)
次のコードを使用して、ログファイルを毎日ローテーションできます。
var winston = require('winston');
require('winston-daily-rotate-file');
var transport = new (winston.transports.DailyRotateFile)({
filename: './log',
datePattern: 'yyyy-MM-dd.',
prepend: true,
level: info
});
var logger = new (winston.Logger)({
transports: [
transport
]
});
logger.info('Hello World!');