Thomas Heymann が提案したように log-callback 内で呼び出しprocess.exit
ても、特にFile
-transport を使用している場合、ログが実際にフラッシュされることは保証されません。
process.exit を直接呼び出す代わりにprocess.exit
、ログがフラッシュされた後にロガーを呼び出すようにします。
ロガー.js:
var winston = require('winston');
winston.loggers.add('my-logger', {
console: {
level: 'debug',
colorize: true,
timestamp: true,
handleExceptions: true
},
file: {
level: 'info',
colorize: false,
timestamp: true,
filename: file,
handleExceptions: true
}
});
var logger = winston.loggers.get('my-logger');
/* ******* *
* EXPORTS
* ******* */
exports.exitAfterFlush = function(code) {
logger.transports.file.on('flush', function() {
process.exit(code);
});
};
exports.info = function() {
logger.info.apply(this, arguments);
};
exports.warn = function() {
logger.info.apply(this, arguments);
};
exports.error = function() {
logger.info.apply(this, arguments);
};
そしてあなたのコードで:
var logger = require('./logger.js');
logger.exitAfterFlush(0);
info('Done!');
NodeJS v4.1.2 および winston 1.1.0 でテスト済み