nodejs / winston logging -- 我想要几个日志文件,一个包含所有请求,一个只有 POST,另一个包含 GET(里面有详细信息)



下面的代码将所有请求记录到两个文件中,其中一个文件是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' }));

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

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

添加文件传输:

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

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

winston.remove(winston.transports.Console);

试试这个:

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

consolefile传输都采用silent选项来抑制输出;通过将它添加到一个记录器中(或者同时添加到两个记录器中),它将抑制控制台输出,但保留文件输出。

最新更新