0

Winston で複数のトランスポートを使用しようとしています。これは機能しています...ちょっと。カスタム レベルの「監査」と「情報」のトランスポートを使用して、アプリの監査ログ用にトランスポートをセットアップしました。

var winston_mongo_options = {
    level: 'audit', // level that should be logged
    safe: true, //makes sure writes happen before firing log event
    db: config.db.db,   // db in which to write logs
    host: config.db.host,
    port: config.db.port,
    collection: config.db.audit_collection  // collection we want logging to occur
};
if (config.db.user) {
  winston_mongo_options.username = config.db.user;
  winston_mongo_options.password = config.db.pass;
}

var custom_levels = winston.config.syslog.levels;
custom_levels.audit = 8;
var logger = new (winston.Logger)({
    levels: custom_levels,
    transports : [
        new (winston.transports.MongoDB)(winston_mongo_options),
        new (winston.transports.File)({
            level: 'info',
            silent: false,
            colorize: true,
            timestamp: true,
            filename: config.logs.debug,
            maxsize: 500000,
            maxFiles: 5,
            json: true
        })
    ],
    exceptionHandlers: [ 
        new (winston.transports.File)({
            silent: false,
            colorize: false,
            timestamp: true,
            filename: config.logs.exception,
            maxsize: 500000,
            maxFiles: 5,
            json: true
        })
    ]
});

module.exports.logger = logger;

明らかに、ログを記録したい場所/ときにこのファイルが必要です。特定の情報をログに個別に送信したい場合に問題が発生します。

logger.audit('Server Started - to DB');
logger.info('Server Started - to info');

これらの 2 行は、別々のログに書き込まれます。最初の行は、データベースと情報ログ ファイルに適切に書き込まれます。私は何を間違っていますか?

4

1 に答える 1

2

解決済み: 問題は、レベルを定義する方法でした。Winston のロギングの仕組みが、ログが定義されたレベル以上のすべてを受け取るということに気が付きませんでした。そのため、レベル 0 の「info」トランスポートは、レベル 8 の「audit」トランスポートに送信されたメッセージを受信して​​いました。「audit」をレベル 0 に設定すると、「info」ログに表示されなくなりました。次に、監査データベース ログ専用のまったく新しいロガーを作成することで、より良い解決策を見つけました。

于 2014-09-18T14:40:47.123 に答える