2016-09-01 5 views
0

Ich denke, etwas in meiner Konfiguration von Winston 2.2.0 fehlt, da ich Probleme habe, es korrekt ausgeben Arrays. Mit richtig, ich meine genau wie die console.log ausgeben würde. Meine Konfiguration enthält nur einen Standard transports.console.Node.js Winston Protokollierung: Array-Ausgabe

Wenn dem Logger nur ein Argument übergeben wird, werden die Arrays zuerst mit Indizes angezeigt, während sie korrekt gedruckt werden, wenn zwei angegeben werden.

Beispiele:

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 

auf prettyPrint:true Drehen macht die JSON-Objekte korrekt, angezeigt werden aber zusätzliche Farben, Wagenrücklauf hinzufügen und zeigt noch Arrays mit Indizes.

+1

'logger.debug ('% j', [1, 2])' '? – robertklep

Antwort

0

Diese Umgehungsmöglichkeit sieht böse und Anrufe an den Logger mit mehreren Argumenten ausschließen, aber es funktioniert:

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],'') 
} 

Ergebnisse:

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([]) 

Ausgang:

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] [] 
1

Nicht ideal, aber vielleicht noch nützlich:

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

extra "{}" löschen: '' return meta &&! IsEmpty (meta)? JSON.stringify (meta): meta; ''. Dies führt jedoch dazu, dass die Ausgabe von "null" zum Verschwinden gebracht wird. – Flint

Verwandte Themen