首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Winston有多个日志文件?

Winston有多个日志文件?
EN

Stack Overflow用户
提问于 2012-04-06 23:52:47
回答 5查看 19.1K关注 0票数 20

我们想要使用Winston来登录Node.js。但是,我们不知道如何拥有两个日志文件:一个用于错误,另一个用于其他所有内容。

然而,这种天真的方式是行不通的:添加多个winston.transports.File传输会导致错误。

Others have run into this problem, with vague hints of a solution, but no real answer

有什么想法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-06-29 20:50:33

我刚刚发送了一个拉取请求,允许在一个记录器中使用多个文件传输。https://github.com/flatiron/winston/pull/149

它已经合并到flatiron/winston中。

您还可以使用我的派生存储库:https://github.com/pdobrev/winston

票数 9
EN

Stack Overflow用户

发布于 2013-06-29 07:12:27

不幸的是,pesho提到的补丁似乎仍然没有包含在官方版本中(参见stephenbeeson在pull request #149中的评论)。

因此,我使用了一种变通方法。当winston比较name属性时,您可以通过自己定义name来欺骗它:

代码语言:javascript
复制
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

也许不是很优雅,但至少它是有效的。

票数 21
EN

Stack Overflow用户

发布于 2014-06-10 00:35:14

同时,您可以使用相同的接口实现一个基本的包装器,如下所示

代码语言:javascript
复制
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。可以针对元数据等进行扩展。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10045891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档