像 Thomas Heymann 建议的那样在日志回调中调用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 上测试