2013-07-31 6 views
18

che sto cercando di ottenere Winston per stampare abbastanza alla console, così ho bloccato questo in un file e corse con nodo:Winston non si pretty-print per consolare

var winston = require('winston'); 
winston.cli(); 
winston.data({ 
    a: "test", 
    of: "many", 
    properties: { 
    like: "this" 
    } 
}); 
winston.data('data', { 
    a: "test", 
    of: "many", 
    properties: { 
    like: "this" 
    } 
}); 

Il terminale spit indietro le seguenti (non proprio belle) messaggi:

data:  a=test, of=many, like=this 
data: data a=test, of=many, like=this 

sto seguendo le istruzioni riportate sul Winston Readme ("Utilizzo di Winston in uno strumento CLI"). Sto fraintendendo qualcosa? Manca un'impostazione da qualche parte?

risposta

25

Ho trovato la risposta (la documentazione non è corretta). Se si utilizza la funzione di costruzione e si aggiungono manualmente i trasporti, è possibile impostare le opzioni, sia per winston che per i singoli trasporti. Alcune opzioni devono essere aggiunte direttamente a Winston, mentre altre devono essere aggiunte al trasporto.

Es .:

var winston = require('winston'); 
var logger = new (winston.Logger)({ 
    levels: { 
    trace: 0, 
    input: 1, 
    verbose: 2, 
    prompt: 3, 
    debug: 4, 
    info: 5, 
    data: 6, 
    help: 7, 
    warn: 8, 
    error: 9 
    }, 
    colors: { 
    trace: 'magenta', 
    input: 'grey', 
    verbose: 'cyan', 
    prompt: 'grey', 
    debug: 'blue', 
    info: 'green', 
    data: 'grey', 
    help: 'cyan', 
    warn: 'yellow', 
    error: 'red' 
    } 
}); 

logger.add(winston.transports.Console, { 
    level: 'trace', 
    prettyPrint: true, 
    colorize: true, 
    silent: false, 
    timestamp: false 
}); 

logger.add(winston.transports.File, { 
    prettyPrint: false, 
    level: 'info', 
    silent: false, 
    colorize: true, 
    timestamp: true, 
    filename: './nKindler.log', 
    maxsize: 40000, 
    maxFiles: 10, 
    json: false 
}); 
+6

Non dovrebbe i numeri sui livelli in ordine inverso? Per esempio. error = 0 e trace = 9 https://github.com/winstonjs/winston#logging-levels – Lukas

+0

questo non funziona con formattatore personalizzato. – theusguy

2

ho preso la risposta di @ partycoder e assettato verso il basso per utilizzare solo i livelli di registrazione predefiniti che vengono con Winston. Inoltre, non inverte l'ordine degli errori. 0 = massima priorità.

winston.addColors({ 
    silly: 'magenta', 
    debug: 'blue', 
    verbose: 'cyan', 
    info: 'green', 
    warn: 'yellow', 
    error: 'red' 
}); 

winston.remove(winston.transports.Console); 
winston.add(winston.transports.Console, { 
    level: process.env.LOG_LEVEL, 
    prettyPrint: true, 
    colorize: true, 
    silent: false, 
    timestamp: false 
}); 
0

Se si sta utilizzando [email protected], la risposta accettata non funzionerà. Provare quanto segue:

const winston = require("winston"); 
let date = new Date().toISOString(); 
const logFormat = winston.format.printf(function(info) { 
    return `${date}-${info.level}: ${JSON.stringify(info.message, null, 4)}\n`; 
}); 
const logger = new winston.createLogger({ 
    transports: [ 
    new winston.transports.Console({ 
     level: level, 
     format: winston.format.combine(winston.format.colorize(), logFormat) 
    }) 
    ] 
}); 

I registri avranno il seguente formato:

E 'colorato BTW

2018-03-01T19:49:54.042Z-info: "----- Customer Details ------" 

2018-03-01T19:49:54.042Z-info: [ 
    { 
     "A": 1, 
     "B": 2 
    } 
]