2013-03-20 3 views
25

Sto utilizzando la registrazione winston con la mia app node.js e ho definito un trasporto di file. Nel mio codice, registro utilizzando logger.error, logger.warn o logger.info.Come impostare il livello di registro in Winston/Node.js?

La mia domanda è, come si specifica il livello di registro? Esiste un file di configurazione e un valore che posso impostare in modo che vengano registrati solo i messaggi di registro appropriati? Ad esempio, mi piacerebbe che il livello del registro fosse "info" nel mio ambiente di sviluppo ma "errore" nella produzione.

risposta

19

Sembra che ci sia un'opzione di livello le opzioni passate coperto here

Da quel doc:

var logger = new (winston.Logger)({ 
    transports: [ 
    new (winston.transports.Console)({ level: 'error' }), 
    new (winston.transports.File)({ filename: 'somefile.log' }) 
    ] 
}); 

Ora, questi esempi mostrano il livello passando l'oggetto opzione per il trasporto della console. Quando si utilizza un trasporto di file, credo che si passerebbe un oggetto opzioni che non solo contiene il percorso file ma anche il livello.

che dovrebbe portare a qualcosa di simile:

var logger = new (winston.Logger)({ 
    transports: [ 
    new (winston.transports.File)({ filename: 'somefile.log', level: 'error' }) 
    ] 
}); 

Per quel doc, nota anche che a partire dal 2.0, espone un metodo setLevel di cambiare in fase di esecuzione. Cerca nella sezione Uso dei livelli di registro di quel documento.

+1

bryanmac, grazie per la risposta ma sono fiducioso ancora non risponde alla mia domanda. Permettimi di chiarire.Nel mio precedente lavoro, stavamo usando un modulo di registrazione personalizzato che era molto simile a quello di winston. Il modulo faceva affidamento su una voce in un file di configurazione che impostava il livello di registro. Se dovessimo eseguire il debug di qualsiasi problema, cambieremmo la voce nel file di configurazione in modo da aumentare la verbosità del log. Ma in altri periodi, impostiamo il livello al livello più basso in modo da registrare solo gli errori. È qualcosa del genere possibile con Winston? –

+1

Il codice programmatico precedente potrebbe leggere da un file di registro per impostare il livello di registrazione iniziale. Ora, per cambiare a runtime dal livello iniziale/predefinito, potresti esporre un'API che gira e chiama il metodo setLevel che ho menzionato. In questo modo potresti avere una pagina di amministrazione che legge il livello del registro e un modo per impostarlo. – bryanmac

+0

Bryan, accetterò la tua risposta iniziale + il tuo commento come risposta alla mia domanda. Grazie. –

7

Ci sono 6 livelli di default a Winston: Sciocco = 0 (basso), debug = 1, verbose = 2, info = 3, avvertono = 4, errore = 5 (più alto)

Durante la creazione di trasporti logger , è possibile specificare il livello di log come:

new (winston.transports.File)({ filename: 'somefile.log', level: 'warn' }) 

Sopra codice imposterà livello di log al warn, il che significa silly, verbose e info non sarà in uscita a somefile.log, mentre warn, debug e error volontà.

È possibile anche definire i propri livelli:

var myCustomLevels = { 
    levels: { 
    foo: 0, 
    bar: 1, 
    baz: 2, 
    foobar: 3 
    } 
}; 

var customLevelLogger = new (winston.Logger)({ levels: myCustomLevels.levels }); 
customLevelLogger.foobar('some foobar level-ed message'); 

Nota che è meglio per includere sempre i 6 livelli predefiniti in tuoi livelli personalizzati, nel caso in cui qualche parte utilizzato i livelli predefiniti.

+0

Chen, grazie per la tua risposta. Ho accettato la risposta di Bryan sopra. Ma anche il tuo è stato di grande aiuto. –

+3

Mi dispiace ma @Chen è sbagliato. Il debug è inferiore a verbose. Suggerito una modifica. –

+0

@filsmick Hai ragione. Il debug era superiore a verboso quando ho scritto questa risposta, ma ora verbose è più alto. – Chen

3

È possibile modificare il livello di registrazione in runtime modificando la proprietà level del trasporto appropriata:

var log = new (winston.Logger)({ 
    transports: [ 
     new (winston.transports.Console)({ level : 'silly' }) 
    ] 
}); 

... 

// Only messages with level 'info' or higher will be logged after this. 
log.transports.Console.level = 'info'; 

immagino, che funziona in modo analogo per il file ma non ho provato.

32
winston = require('winston'); 
: 
: 
winston.level = 'debug'; 

imposta il livello di registro su "debug". (Testato con Winston 0.7.3)

+2

sì, questa è la risposta corretta, gli altri richiedono la creazione di un nuovo logger e non regolano le impostazioni dei logger predefiniti esistenti creati da winston. –

0

Se si desidera modificare il livello del registro al volo. Piace quando è necessario tracciare il problema di produzione per un breve periodo di tempo; quindi ripristinare il livello del log degli errori. Puoi usare un logger dinamico purché tu possa esporre un servizio sul web https://github.com/yannvr/Winston-dynamic-loglevel