2013-08-27 4 views
6

Wie sagt man Winston, mehrere Ebenen zu einem einzigen Transport zu protokollieren? Zum Beispiel, wenn Sie sowohl info als auch error Level-Elemente auf der Konsole protokollieren möchten, wie würden Sie dies erreichen? Die Angabe info protokolliert nicht alle Ebenen, die Info-Level und kritischer sind, es protokolliert nur info. Ein Array von Ebenen an die level Eigenschaft übergeben tut nichts.Wie fügen Sie mehrere Ebenen zu einem einzelnen Transport in Winston hinzu?

winston.add(winston.transports.Console, { 
    colorize: true, 
    level: 'info' 
}); 

oder

winston.add(winstonMongo, { 
    safe: false, 
    db: 'logs', 
    collection: 'api', 
    level: 'info' 
}); 
+0

Erhöht sich die Protokollstufe nicht inkrementell? Wenn Sie Debug protokollieren, enthält es keine Informationen? –

+0

Es gab ein Problem in meinem Code, das die Protokollierung verhinderte. Das 'Info'-Level beinhaltet alle weiteren Serverlevel. –

+0

Es scheint, dass ein Fehler im Code syslog-config.js für das Level-Objekt vorliegt. Sie sind in umgekehrter Reihenfolge mit "emerg" bei 0 und "debug" bei 7 angeordnet. –

Antwort

5

Festlegen der info Ebene alle Ebenen enthält, die schwerer sind (zB: warn, error, debug). In ähnlicher Weise enthält die Angabe den Wert plus den schwereren Wert error.

+0

Nehmen Sie das folgende Beispiel: logger.info ('einige Informationen'); logger.error ('irgendein Fehler'); logger.myCustomLevel ('einige Anpassungen'); Der Konsolentransport wird dem Logger mit der Standardstufe (info) hinzugefügt: Ich nehme an, dass jedes Protokoll in der Konsole geschrieben werden sollte, richtig? Wenn nicht, wie kann ich verschiedene Ebenen innerhalb eines einzelnen Transports protokollieren? Können Sie bitte ein Arbeitsbeispiel mit Console, File oder Whatever Transport posten? – Wilk

1

Für die Nachwelt habe ich ein Code-Snippet aus dem Winston-Quellcode enthalten, in dem die Standard-Log-Level aufgeführt sind. Wie in anderen Antworten erwähnt, wird das Angeben eines niedrigeren Log-Levels die Levels über z.B. Wenn Sie silly angeben, werden alle anderen Ebenen protokolliert, während debug nur silly protokolliert wird.

npmConfig.levels = { 
    silly: 0, 
    debug: 1, 
    verbose: 2, 
    info: 3, 
    warn: 4, 
    error: 5 
}; 

Nach dem winston readme das ist der „NPM“ Stil, aber die npm document verbindet sie mit unterschiedlichen Protokollebene hat.