Node.js Winston日志记录:数组输出

时间:2016-09-01 09:40:36

标签: arrays node.js winston

我想我的winston 2.2.0配置中缺少一些东西,因为我无法正确输出数组。通过正确,我的意思是console.log输出。 我的配置仅保留默认transports.console

如果只给记录器一个参数,那么首先显示带有索引的数组,如果给出两个,则正确打印数组。

示例:

logger.debug ([ 1,2 ])
> 0=1, 1=2

logger.debug (  [ 1,2], '')
> [ 1, 2 ] ''

logger.debug ({x:1,y:2,z:{i:3}})
> x=1, y=2, i=3

打开prettyPrint:true会使json对象正确显示,但添加额外的颜色,回车并仍显示带索引的数组。

2 个答案:

答案 0 :(得分:1)

不理想,但可能仍然有用:

var logger  = new winston.Logger({
  transports : [ new winston.transports.Console({}) ],
  rewriters  : [
    function (level, msg, meta) {
      return meta ? JSON.stringify(meta) : meta;
    }
  ]
});

答案 1 :(得分:0)

这种解决方法看起来很讨厌并且排除了对具有多个参数的记录器的调用,但它可以工作:

logger.dbg = function() {
    if(arguments.length>1) this.warn("more than one arg given to dbg()")
    if(Array.isArray(arguments[0]))
        logger.debug('%j',arguments[0])
    else
        logger.debug(arguments[0],'')
}

结果:

logger.dbg([ 1, 2, {x:1} ])
logger.dbg({x:1,z:2, s:[1,]})
logger.dbg("AAA")
logger.dbg(undefined)
logger.dbg(null)
logger.dbg([])

输出:

debug: [log.js:131] [1,2,{"x":1}]
debug: [log.js:132] { x: 1, z: 2, s: [ 1 ] } 
debug: [log.js:133] AAA 
debug: [log.js:134] undefined 
debug: [log.js:135] null 
debug: [log.js:136] []