Log do Node.js

177

Existe alguma biblioteca que me ajude a lidar com o logon no meu aplicativo Node.Js? Tudo o que quero fazer é escrever todos os logs em um arquivo e também preciso de opções como estender o arquivo após determinado tamanho ou data.


Incorporei o log4js, tentando manter todos os detalhes de configuração em um arquivo e usar apenas os métodos em outros arquivos de aplicativos para facilitar a manutenção. Mas não funciona como esperado. Aqui está o que estou tentando fazer

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;

Eu incluí este arquivo em outros arquivos e tentei

log.error ("Hello Error Message");

Mas isto não está funcionando. Há algo de errado nisso?

syv
fonte
1
log4js parece ok. você definiu o nível de erro errado. deve ser: logger.setLevel (log4js.levels.ERROR);
Boklucius 27/02

Respostas:

196

Winston é uma biblioteca de registro muito boa. Você pode gravar logs em um arquivo usando-o.

Código seria algo como:

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;

Você pode usar isso como:

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

logger.info('log to file');
Charlie Key
fonte
3
Eu uso o winston há muito tempo. Ficou de buggy e eu o abandonei em favor do npmlog.
airportyh
8
@ todo mundo, parece que o winston está sendo mantido novamente ... github.com/flatiron/winston/network
Daithí
Apenas uma observação rápida: chame logger.cli () no exemplo acima para obter uma saída de linha de comando colorida.
Duncan
1
O Winston não permite que sua configuração seja definida e lida a partir de um arquivo .json. Projeto pobre, imo.
Dezl'15
59

Scribe.JS Lightweight Logger

Eu procurei por muitos registradores e não consegui encontrar uma solução leve - então decidi criar uma solução simples que é postada no github.

  • Salva o arquivo organizado por usuário, data e nível
  • Dá-lhe uma saída bonita (todos nós amamos isso)
  • Interface HTML fácil de usar

Espero que isso ajude você.

Demo Online

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

Acesso seguro da web a logs

UMA

Imprime texto bonito para o console também!

UMA

Acesso à Web

UMA

Github

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

Mathew Kurian
fonte
5
esta biblioteca não é mais mantido: github.com/bluejamesbond/...
Simon Meusel
30

O Log4js é uma das bibliotecas de log mais populares para aplicativos nodejs.

Ele suporta muitos recursos interessantes:

  1. Registro de console colorido
  2. Substituição das funções console.log do nó (opcional)
  3. Appender de arquivo, com registro de log com base no tamanho do arquivo
  4. SMTP, GELF, hook.io, aplicativo Loggly
  5. Appprender multiprocesso (útil quando você tem processos de trabalho)
  6. Um criador de logs para conectar / expressar servidores
  7. Layout / padrões de mensagens de log configuráveis
  8. Níveis de log diferentes para diferentes categorias de log (faça com que algumas partes do seu aplicativo registrem como DEBUG, outras apenas ERROS etc.)

Exemplo:

  1. Instalação: npm install log4js

  2. Configuração ( ./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
Tho
fonte
6

O "logger.setLevel ('ERROR');" está causando o problema. Não entendo o porquê, mas quando o defino para algo diferente de "ALL", nada é impresso no arquivo. Eu bisbilhotei um pouco e modifiquei seu código. Está funcionando bem pra mim. Eu criei dois arquivos.

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 executo "node logger.test.js", vejo apenas "mensagem de erro" no arquivo test.log. Se eu alterar o nível para "TRACE", as duas linhas serão impressas no test.log.

Alexander Jeyaraj
fonte
2
logging.apache.org/log4j/1.2/manual.html Os registradores podem ter níveis atribuídos. O conjunto de níveis possíveis, ou seja: TRACE, DEBUG, INFO, WARN, ERROR e FATAL Uma solicitação de log é ativada se seu nível for maior ou igual ao nível do seu logger. Caso contrário, a solicitação será desativada.
Shawn C.
3

Winston é uma escolha forte para a maioria dos desenvolvedores. Estou usando o winston há muito tempo. Recentemente, usei o winston with com papertrail, que leva o registro de aplicativos ao próximo nível.

Aqui está uma bela captura de tela do site deles.

insira a descrição da imagem aqui

Como é útil

  • você pode gerenciar logs de diferentes sistemas em um só lugar. isso pode ser muito útil quando você tem dois back-end se comunicando e pode ver os logs de ambos no local.

  • Os logs estão ativos. você pode ver os registros em tempo real do seu servidor de produção.

  • Pesquisa e filtro poderosos

  • você pode criar alertas para enviar e-mail se encontrar texto específico no log.

e você pode encontrar mais http://help.papertrailapp.com/kb/how-it-works/event-viewer/

Uma configuração simples usando winston, winston-expresse winston-papertrailmódulos de nó.

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 isso ajude alguém a gerenciar seus logs !!

vinha
fonte
1
Isso ainda funciona, no entanto, após a atualização do winston para a v3, você recebe um aviso: "O Papertrail é um transporte herdado do winston. Considere a atualização". Há uma atualização para o transporte atualmente excelente.
21718 Jim Jimson
2

Um módulo 'nodejslogger' pode ser usado para um log simples. Possui três níveis de log (INFO, ERRO, DEBUG)

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

D: Depuração, I: Informações, E: Erro

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

O módulo pode ser acessado em: https://www.npmjs.com/package/nodejslogger

rohit kamal
fonte
0

Observe que errorLogger é um wrapper em torno de logger.trace . Mas o nível de logger é ERROR, portanto logger.trace não registrará sua mensagem nos anexos do logger .

A correção é para mudar logger.trace para logger.error no corpo de errorLogger .

Roland Maio
fonte