我想在 process.exit
之前冲洗winston Logger .
process.on('uncaughtException', function(err){
logger.error('Fatal uncaught exception crashed cluster', err);
logger.flush(function(){ // <-
process.exit(1);
});
});
有什么像 logger.flush
可用吗?除了人们抱怨温斯顿没有得到非常积极的维护之外,我找不到任何关于它的信息 .
作为替代方案,是否有任何流行的(主动维护的)多传输日志框架提供刷新功能?
4 回答
Winston实际上允许您传入一个回调,该回调在记录所有传输时执行:
文件:https://github.com/flatiron/winston#events-and-callbacks-in-winston
在Thomas Heymann建议的日志回调中调用
process.exit
将无法确保日志实际被刷新,尤其是在使用File
-transport时 .我不会直接调用process.exit,而是在刷新日志后让 Logger 调用
process.exit
:logger.js:
在你的代码中:
在NodeJS v4.1.2和winston 1.1.0上测试过
不幸的是,Winston有时会在传输有机会刷新之前调用日志回调,因此接受的答案仍然可能导致未保存的日志消息(特别是在事件循环的第一个转弯处) . 在winston-log-and-exit包/补丁中实现了更好的解决方案 .
温斯顿有更好的方法来处理这种异常 .