我们想要使用Winston来登录Node.js。但是,我们不知道如何拥有两个日志文件:一个用于错误,另一个用于其他所有内容。
然而,这种天真的方式是行不通的:添加多个winston.transports.File传输会导致错误。
Others have run into this problem, with vague hints of a solution, but no real answer。
有什么想法吗?
发布于 2012-06-29 20:50:33
我刚刚发送了一个拉取请求,允许在一个记录器中使用多个文件传输。https://github.com/flatiron/winston/pull/149
它已经合并到flatiron/winston中。
您还可以使用我的派生存储库:https://github.com/pdobrev/winston
发布于 2013-06-29 07:12:27
不幸的是,pesho提到的补丁似乎仍然没有包含在官方版本中(参见stephenbeeson在pull request #149中的评论)。
因此,我使用了一种变通方法。当winston比较name属性时,您可以通过自己定义name来欺骗它:
winston = require 'winston'
logger = new winston.Logger
transports: [
new winston.transports.File
name: 'file#debug'
level: 'debug'
filename: '/tmp/debug.log'
new winston.transports.File
name: 'file#error'
level: 'error'
filename: '/tmp/error.log'
]
logger.error 'error' # both logs
logger.debug 'debug' # on debug log也许不是很优雅,但至少它是有效的。
发布于 2014-06-10 00:35:14
同时,您可以使用相同的接口实现一个基本的包装器,如下所示
var winston = require('winston');
var configs = require('./env.js');
var debug = new winston.Logger({
levels: {
debug: 0
},
transports: [
new (winston.transports.File)({ filename: configs.PATH_TO_LOG, level: 'debug'}),
new (winston.transports.Console)({level: 'debug'})
]
});
var info = new winston.Logger({
levels: {
info: 1
},
transports: [
new (winston.transports.File)({ filename: configs.PATH_TO_LOG, level: 'info'}),
new (winston.transports.Console)({level: 'info'})
]
});
var warn = new winston.Logger({
levels: {
warn: 2
},
transports: [
new (winston.transports.File)({ filename: configs.PATH_TO_LOG, level: 'warn'}),
new (winston.transports.Console)({level: 'warn'})
]
});
var error = new winston.Logger({
levels: {
error: 3
},
transports: [
new (winston.transports.File)({ filename: configs.PATH_TO_LOG, level: 'error'}),
new (winston.transports.Console)({level: 'error'})
]
});
var exports = {
debug: function(msg){
debug.debug(msg);
},
info: function(msg){
info.info(msg);
},
warn: function(msg){
warn.warn(msg);
},
error: function(msg){
error.error(msg);
},
log: function(level,msg){
var lvl = exports[level];
lvl(msg);
}
};
module.exports = exports;这将涵盖基本的winston API。可以针对元数据等进行扩展。
https://stackoverflow.com/questions/10045891
复制相似问题