Registrazione Node.js


177

Esiste una libreria che mi aiuterà a gestire la registrazione nella mia applicazione Node.Js? Tutto quello che voglio fare è, voglio scrivere tutti i registri in un file e inoltre ho bisogno di opzioni come stendere il file dopo una certa dimensione o data.


Ho incorporato log4js im cercando di mantenere tutti i dettagli di configurazione in un file e utilizzare solo i metodi in altri file dell'applicazione per facilità di manutenzione. Ma non funziona come previsto. Ecco cosa sto cercando di fare

var log4js = require('log4js'); 
log4js.clearAppenders()
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('test.log'), 'test');
var logger = log4js.getLogger('test');
logger.setLevel('ERROR');


var traceLogger = function (message) {
        logger.trace('message');
    };

var errorLogger = function (message) {
        logger.trace(message);
    };


exports.trace = traceLogger;
exports.error = errorLogger;

Ho incluso questo file in altri file e ho provato

log.error ("Hello Error Message");

Ma non sta funzionando. C'è qualcosa di sbagliato in questo?


1
log4js sembra ok. hai impostato il livello di errore sbagliato. dovrebbe essere: logger.setLevel (log4js.levels.ERROR);
Boklucius,

Risposte:


196

Winston è una libreria di registrazione piuttosto buona. È possibile scrivere i log in un file utilizzandolo.

Il codice sarebbe simile a:

var winston = require('winston');

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.Console)({ json: false, timestamp: true }),
    new winston.transports.File({ filename: __dirname + '/debug.log', json: false })
  ],
  exceptionHandlers: [
    new (winston.transports.Console)({ json: false, timestamp: true }),
    new winston.transports.File({ filename: __dirname + '/exceptions.log', json: false })
  ],
  exitOnError: false
});

module.exports = logger;

È quindi possibile utilizzare questo come:

var logger = require('./log');

logger.info('log to file');


3
Ho usato Winston per molto tempo. È stato danneggiato e l'ho abbandonato a favore di npmlog.
airportyh

8
@everyone, sembra che Winston venga di nuovo mantenuto ... github.com/flatiron/winston/network
Daithí

Solo una breve nota: chiama logger.cli () nell'esempio sopra per l'output colorato della riga di comando.
Duncan,

1
Winston non consente di definire e leggere la sua configurazione da un file .json. Design scadente, imo.
minimo

59

Scribe.JS Logger leggero

Ho esaminato molti logger e non sono riuscito a trovare una soluzione leggera, quindi ho deciso di creare una soluzione semplice pubblicata su github.

  • Salva il file organizzato per utente, data e livello
  • Ti dà un bel risultato (lo adoriamo tutti)
  • Interfaccia HTML facile da usare

Spero che questo ti aiuti.

Demo online

http://bluejamesbond.github.io/Scribe.js/

Accesso Web sicuro ai registri

UN

Stampa anche un bel testo su console!

UN

Accesso al web

UN

Github

https://github.com/bluejamesbond/Scribe.js


5
questa libreria non è più mantenuta: github.com/bluejamesbond/…
Simon Meusel

30

Log4js è una delle librerie di registrazione più popolari per l'applicazione nodejs.

Supporta molte funzioni interessanti:

  1. Registrazione console colorata
  2. Sostituzione delle funzioni console.log del nodo (opzionale)
  3. File appender, con rotazione del registro in base alla dimensione del file
  4. SMTP, GELF, hook.io, Loggly appender
  5. Appender multiprocesso (utile quando si hanno processi di lavoro)
  6. Un logger per server connect / express
  7. Layout / schemi dei messaggi di registro configurabili
  8. Livelli di registro diversi per diverse categorie di registro (rendere alcune parti del registro dell'app come DEBUG, altre solo ERRORI, ecc.)

Esempio:

  1. Installazione: npm install log4js

  2. Configurazione ( ./config/log4js.json):

    {"appenders": [
        {
            "type": "console",
            "layout": {
                "type": "pattern",
                "pattern": "%m"
            },
            "category": "app"
        },{
            "category": "test-file-appender",
            "type": "file",
            "filename": "log_file.log",
            "maxLogSize": 10240,
            "backups": 3,
            "layout": {
                "type": "pattern",
                "pattern": "%d{dd/MM hh:mm} %-5p %m"
            }
        }
    ],
    "replaceConsole": true }
  3. Uso:

    var log4js = require( "log4js" );
    log4js.configure( "./config/log4js.json" );
    var logger = log4js.getLogger( "test-file-appender" );
    // log4js.getLogger("app") will return logger that prints log to the console
    logger.debug("Hello log4js");// store log in file


6

"Logger.setLevel ('ERROR');" sta causando il problema. Non capisco perché, ma quando lo imposto su qualcosa di diverso da "ALL", nulla viene stampato nel file. Ho cercato un po 'in giro e ho modificato il tuo codice. Funziona bene per me. Ho creato due file.

logger.js

var log4js = require('log4js');
log4js.clearAppenders()
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('test.log'), 'test');
var logger = log4js.getLogger('test');
logger.setLevel('ERROR');

var getLogger = function() {
   return logger;
};

exports.logger = getLogger();

logger.test.js

var logger = require('./logger.js')

var log = logger.logger;

log.error("ERROR message");
log.trace("TRACE message");

Quando eseguo "node logger.test.js", vedo solo "messaggio ERRORE" nel file test.log. Se cambio il livello in "TRACE", entrambe le righe vengono stampate su test.log.


2
logging.apache.org/log4j/1.2/manual.html È possibile assegnare livelli ai logger. L'insieme di livelli possibili, ovvero: TRACE, DEBUG, INFO, WARN, ERROR e FATAL Si dice che una richiesta di registrazione è abilitata se il suo livello è superiore o uguale al livello del suo logger. Altrimenti, si dice che la richiesta è disabilitata.
Shawn C.

3

Winston è una scelta forte per la maggior parte degli sviluppatori. Uso Winston da molto tempo. Recentemente ho usato Winston con Papertrail che porta la registrazione dell'applicazione al livello successivo.

Ecco un bel screenshot dal loro sito.

inserisci qui la descrizione dell'immagine

Quanto è utile

  • puoi gestire i log di diversi sistemi in un unico posto. questo può essere molto utile quando si hanno due back-end in comunicazione e si possono vedere i log da entrambi sul posto.

  • I registri sono attivi. puoi vedere i log in tempo reale del tuo server di produzione.

  • Ricerca e filtro potenti

  • puoi creare avvisi per inviarti email se trova testo specifico nel registro.

e puoi trovare altro http://help.papertrailapp.com/kb/how-it-works/event-viewer/

Una semplice configurazione con winston, winston-expresse winston-papertrailmoduli nodo.

import winston from 'winston';
import expressWinston from 'express-winston';
//
// Requiring `winston-papertrail` will expose
// `winston.transports.Papertrail`
//
require('winston-papertrail').Papertrail;
// create winston transport for Papertrail
var winstonPapertrail = new winston.transports.Papertrail({
  host: 'logsX.papertrailapp.com',
  port: XXXXX
});
app.use(expressWinston.logger({
  transports: [winstonPapertrail],
  meta: true, // optional: control whether you want to log the meta data about the request (default to true)
  msg: "HTTP {{req.method}} {{req.url}}", // optional: customize the default logging message. E.g. "{{res.statusCode}} {{req.method}} {{res.responseTime}}ms {{req.url}}"
  expressFormat: true, // Use the default Express/morgan request formatting. Enabling this will override any msg if true. Will only output colors with colorize set to true
  colorize: true, // Color the text and status code, using the Express/morgan color palette (text: gray, status: default green, 3XX cyan, 4XX yellow, 5XX red).
  ignoreRoute: function (req, res) { return false; } // optional: allows to skip some log messages based on request and/or response
}));

Spero che questo aiuti qualcuno a gestire i propri registri !!


1
Funziona ancora, tuttavia dopo l'aggiornamento di Winston a V3 viene visualizzato un avviso: "Papertrail è un trasporto Winston legacy. Prendere in considerazione l'aggiornamento". C'è un aggiornamento al trasporto attualmente in sospeso.
Jim Jimson,

2

Un modulo 'nodejslogger' può essere utilizzato per la registrazione semplice. Ha tre livelli di registrazione (INFO, ERRORE, DEBUG)

var logger = require('nodejslogger')
logger.init({"file":"output-file", "mode":"DIE"})

D: Debug, I: Info, E: Errore

logger.debug("Debug logs")
logger.info("Info logs")
logger.error("Error logs")

È possibile accedere al modulo all'indirizzo: https://www.npmjs.com/package/nodejslogger


0

Si noti che errorLogger è un wrapper per logger.trace . Ma il livello di logger è ERRORE così logger.trace non registrerà il suo messaggio al logger appenders s'.

La correzione consiste nel modificare logger.trace in logger.error nel corpo di errorLogger .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.