Registro de Node.js

177

¿Hay alguna biblioteca que me ayude a manejar el inicio de sesión en mi aplicación Node.Js? Todo lo que quiero hacer es escribir todos los registros en un archivo y también necesito opciones como desplegar el archivo después de cierto tamaño o fecha.


He incorporado log4js para intentar mantener todos los detalles de configuración en un archivo y usar solo los métodos en otros archivos de aplicación para facilitar el mantenimiento. Pero no funciona como se esperaba. Esto es lo que estoy tratando de hacer.

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;

He incluido este archivo en otros archivos e intenté

log.error ("Hello Error Message");

Pero no está funcionando. ¿Hay algo malo en esto?

syv
fuente
1
log4js parece estar bien. ha configurado mal el nivel de error. debería ser: logger.setLevel (log4js.levels.ERROR);
Boklucius

Respuestas:

196

Winston es una muy buena biblioteca de registro. Puede escribir registros en un archivo usándolo.

El código se vería así:

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;

Luego puede usar esto como:

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

logger.info('log to file');
Charlie Key
fuente
3
He usado winston por mucho tiempo. Se ha puesto defectuoso y lo he abandonado a favor de npmlog.
airportyh
8
@ todos, parece que Winston se mantiene de nuevo ... github.com/flatiron/winston/network
Daithí
Solo una nota rápida: llame a logger.cli () en el ejemplo anterior para obtener una salida de línea de comandos de color.
Duncan
1
Winston no permite que su configuración se defina y lea desde un archivo .json. Mal diseño, imo.
mínimo
59

Scribe.JS Lightweight Logger

Revisé muchos registradores y no pude encontrar una solución liviana, así que decidí crear una solución simple que se publicara en github.

  • Guarda el archivo organizado por usuario, fecha y nivel
  • Te da una salida bonita (a todos nos encanta)
  • Interfaz HTML fácil de usar

Espero que esto te ayude.

Demo en línea

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

Acceso web seguro a los registros

UNA

Imprime bonito texto a la consola también!

UNA

Acceso web

UNA

Github

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

Mathew Kurian
fuente
55
esta biblioteca ya no se mantiene: github.com/bluejamesbond/…
Simon Meusel
30

Log4js es una de las bibliotecas de registro más populares para la aplicación nodejs.

Es compatible con muchas características interesantes:

  1. Registro de consola en color
  2. Reemplazo de las funciones console.log del nodo (opcional)
  3. Anexo de archivo, con registro de registro basado en el tamaño del archivo
  4. SMTP, GELF, hook.io, Loggly appender
  5. Apéndice de multiproceso (útil cuando tienes procesos de trabajo)
  6. Un registrador para conectar / expresar servidores
  7. Diseño / patrones configurables de mensajes de registro
  8. Diferentes niveles de registro para diferentes categorías de registro (haga que algunas partes de su aplicación se registren como DEPURACIÓN, otras solo ERRORES, etc.)

Ejemplo:

  1. Instalación: npm install log4js

  2. Configuración ( ./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
aunque
fuente
6

El "logger.setLevel ('ERROR');" está causando el problema No entiendo por qué, pero cuando lo configuro en algo que no sea "TODO", no se imprime nada en el archivo. Busqué un poco y modifiqué tu código. Está funcionando bien para mí. Creé dos archivos.

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");

Cuando ejecuto "node logger.test.js", solo veo "mensaje de ERROR" en el archivo test.log. Si cambio el nivel a "TRACE", ambas líneas se imprimen en test.log.

Alexander Jeyaraj
fuente
2
logging.apache.org/log4j/1.2/manual.html A los registradores se les pueden asignar niveles. El conjunto de niveles posibles, es decir: TRACE, DEBUG, INFO, WARN, ERROR y FATAL Se dice que una solicitud de registro está habilitada si su nivel es superior o igual al nivel de su registrador. De lo contrario, se dice que la solicitud está deshabilitada.
Shawn C.
3

Winston es una buena opción para la mayoría de los desarrolladores. He estado usando winston por mucho tiempo. Recientemente utilicé winston con papertrail que lleva el registro de la aplicación al siguiente nivel.

Aquí hay una buena captura de pantalla de su sitio.

ingrese la descripción de la imagen aquí

Cómo es útil

  • Puede administrar registros de diferentes sistemas en un solo lugar. Esto puede ser muy útil cuando tiene dos backend en comunicación y puede ver los registros de ambos en el lugar.

  • Los registros son en vivo. Puede ver registros en tiempo real de su servidor de producción.

  • Potente búsqueda y filtro

  • puede crear alertas para enviarle un correo electrónico si encuentra texto específico en el registro.

y puedes encontrar más http://help.papertrailapp.com/kb/how-it-works/event-viewer/

Una configuración simple usando winston, winston-expressy winston-papertrailmódulos de 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
}));

¡Espero que esto ayude a alguien a administrar sus registros!

vinesh
fuente
1
Esto todavía funciona, sin embargo, después de la actualización de winston a v3 aparece una advertencia: "Papertrail es un transporte heredado de winston. Considere la posibilidad de actualizar". Hay una actualización del transporte actualmente pendiente.
Jim Jimson el
2

Se puede usar un módulo 'nodejslogger' para un registro simple. Tiene tres niveles de registro (INFORMACIÓN, ERROR, DEPURACIÓN)

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

D: depuración, I: información, E: error

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

Se puede acceder al módulo en: https://www.npmjs.com/package/nodejslogger

rohit kamal
fuente
0

Observe que errorLogger es un contenedor alrededor de logger.trace . Pero el nivel del registrador es ERROR, por lo que logger.trace no registrará su mensaje en los apéndices del registrador .

La solución es cambiar logger.trace a logger.error en el cuerpo de errorLogger .

Roland Maio
fuente