20

の前 に winston ロガーをフラッシュしたいprocess.exit

process.on('uncaughtException', function(err){
    logger.error('Fatal uncaught exception crashed cluster', err);
    logger.flush(function(){ // <-
        process.exit(1);
    });
});

利用できるようなものはlogger.flushありますか?winston があまり積極的にメンテナンスされていないことに不満を持っている人を除いて、私はそれについて何も見つけることができませんでした。

別の方法として、フラッシュ機能を提供する一般的な (積極的に維持されている) マルチトランスポート ロギング フレームワークはありますか?

4

5 に答える 5

1

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 でテスト済み

于 2015-10-10T11:52:38.203 に答える
-2

Winston には、この例外に対処するためのより良い方法があります。

var logger = new (winston.Logger)({
    transports: [
      new winston.transports.File({ filename: 'path/to/all-logs.log' })
    ],
    handleExceptions: true,
    exceptionHandlers: [
      new winston.transports.File({ filename: 'path/to/exceptions.log' })
    ]
  });
于 2014-01-08T02:45:09.547 に答える