nodejs / Winston 日志记录 - 我想要几个日志文件,一个包含所有请求,一个仅包含 POST,另一个 GET(内部详细信息)

问题描述 投票:0回答:2

下面的代码将所有请求记录到两个文件中,其中之一是 JSON 格式。这具有将每个请求记录到控制台两次的副作用。这是为什么?我确信我错误地使用了 Winston,如有任何反馈,我们将不胜感激。

var winston = require('winston');


winston.loggers.add('main_nojson', {
    file: {
        filename: '/home/stu/logs/winston_txt.log',
        json: false
    }
});

winston.loggers.add('main_json', {
    file: {
        filename: '/home/stu/logs/winston_json.log',
        json: true
    }
});

var winlog1 = winston.loggers.get('main_nojson');
var winlog2 = winston.loggers.get('main_json');

var winstonStream = {
    write: function(message, encoding){
        winlog1.info(message);
        winlog2.info(message);
    }
};

app.use(express.logger({stream:winstonStream,  format: ':remote-addr - [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent" :response-time' }));
node.js express logging winston node.js-connect
2个回答
3
投票

对于任何可能从谷歌或其他地方偶然发现这个老问题的人:

另一种方法是以与添加控制台传输类似的方式删除控制台传输:

添加文件传输:

winston.add(winston.transports.File, { filename: 'logs/log.log' });

并回答OP的问题,类似地删除控制台传输,从而抑制控制台输出:

winston.remove(winston.transports.Console);

2
投票

试试这个:

winston.loggers.add('main_json', {
    console: {
        silent: true
    },
    file: {
    filename: '/home/stu/logs/winston_json.log',
        json: true
    }
});

console
file
传输都采用
silent
选项来抑制输出;通过将其添加到您的一个记录器 - 或两者,就此而言 - 它将抑制控制台输出,但保留文件输出。

© www.soinside.com 2019 - 2024. All rights reserved.