Journalisation Node.js

177

Existe-t-il une bibliothèque qui m'aidera à gérer la journalisation dans mon application Node.Js? Tout ce que je veux faire, c'est que je veux écrire tous les journaux dans un fichier et j'ai également besoin d'options telles que le déploiement du fichier après une certaine taille ou date.


J'ai incorporé log4js en essayant de conserver tous les détails de configuration dans un seul fichier et d'utiliser uniquement les méthodes des autres fichiers d'application pour faciliter la maintenance. Mais cela ne fonctionne pas comme prévu. Voici ce que j'essaye de faire

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;

J'ai inclus ce fichier dans d'autres fichiers et essayé

log.error ("Hello Error Message");

Mais ça ne fonctionne pas. Y a-t-il quelque chose de mal à cela?

syv
la source
1
log4js semble correct. vous avez mal défini le niveau d'erreur. il doit être: logger.setLevel (log4js.levels.ERROR);
Boklucius

Réponses:

196

Winston est une très bonne bibliothèque de journalisation. Vous pouvez écrire des déconnexions dans un fichier en l'utilisant.

Le code ressemblerait à quelque chose comme:

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;

Vous pouvez ensuite utiliser ceci comme:

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

logger.info('log to file');
Charlie Key
la source
3
J'utilise winston depuis longtemps. Il est devenu bogué et je l'ai abandonné en faveur de npmlog.
airportyh
8
@everyone, semble que winston soit à nouveau maintenu ... github.com/flatiron/winston/network
Daithí
Juste une note rapide: appelez logger.cli () dans l'exemple ci-dessus pour une sortie de ligne de commande colorée.
Duncan
1
Winston ne permet pas que sa configuration soit définie et lue à partir d'un fichier .json. Mauvaise conception, imo.
miniml
59

Enregistreur léger Scribe.JS

J'ai parcouru de nombreux enregistreurs et je n'ai pas pu trouver de solution légère - j'ai donc décidé de créer une solution simple publiée sur github.

  • Enregistre le fichier organisé par utilisateur, date et niveau
  • Vous donne une jolie sortie (nous aimons tous ça)
  • Interface HTML facile à utiliser

J'espère que cela vous aidera.

Démo en ligne

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

Accès Web sécurisé aux journaux

UNE

Imprime aussi un joli texte sur la console!

UNE

L'accès à Internet

UNE

Github

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

Mathew Kurian
la source
5
cette bibliothèque n'est plus maintenue: github.com/bluejamesbond/…
Simon Meusel
30

Log4js est l'une des bibliothèques de journalisation les plus populaires pour l'application nodejs.

Il prend en charge de nombreuses fonctionnalités intéressantes:

  1. Journalisation de la console en couleur
  2. Remplacement des fonctions console.log du nœud (facultatif)
  3. Ajout de fichiers, avec roulement de journal basé sur la taille du fichier
  4. SMTP, GELF, hook.io, appender Loggly
  5. Appender multiprocessus (utile lorsque vous avez des processus de travail)
  6. Un enregistreur pour les serveurs de connexion / express
  7. Disposition / modèles de messages de journal configurables
  8. Différents niveaux de journal pour différentes catégories de journaux (créez certaines parties de votre journal d'application en tant que DEBUG, d'autres uniquement des ERREURS, etc.)

Exemple:

  1. Installation: npm install log4js

  2. Configuration ( ./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. Usage:

    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
la source
6

Le "logger.setLevel ('ERROR');" cause le problème. Je ne comprends pas pourquoi, mais lorsque je le mets sur autre chose que "ALL", rien n'est imprimé dans le fichier. J'ai fouillé un peu et modifié votre code. Cela fonctionne bien pour moi. J'ai créé deux fichiers.

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

Lorsque j'exécute "node logger.test.js", je ne vois que "message d'erreur" dans le fichier test.log. Si je change le niveau en "TRACE", les deux lignes sont imprimées sur test.log.

Alexandre Jeyaraj
la source
2
logging.apache.org/log4j/1.2/manual.html Des niveaux peuvent être attribués aux enregistreurs . L'ensemble des niveaux possibles, c'est-à-dire: TRACE, DEBUG, INFO, WARN, ERROR et FATAL Une requête de journalisation est dite activée si son niveau est supérieur ou égal au niveau de son logger. Sinon, la requête est dite désactivée.
Shawn C.
3

Winston est un choix judicieux pour la plupart des développeurs. J'utilise winston depuis longtemps. Récemment, j'ai utilisé winston avec avec papertrail qui fait passer la journalisation des applications au niveau supérieur.

Voici une belle capture d'écran de leur site.

entrez la description de l'image ici

Comment c'est utile

  • vous pouvez gérer les journaux de différents systèmes en un seul endroit. cela peut être très utile lorsque deux backend communiquent et que vous pouvez voir les journaux des deux sur place.

  • Les journaux sont en direct. vous pouvez voir les journaux en temps réel de votre serveur de production.

  • Recherche et filtre puissants

  • vous pouvez créer des alertes pour vous envoyer un e-mail s'il rencontre un texte spécifique dans le journal.

et vous pouvez en trouver plus http://help.papertrailapp.com/kb/how-it-works/event-viewer/

Une configuration simple utilisant winston, winston-expresset des winston-papertrailmodules de nœuds.

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

J'espère que cela aidera quelqu'un à gérer ses journaux !!

vignes
la source
1
Cela fonctionne toujours, mais après la mise à niveau de winston vers la v3, vous recevez un avertissement: "Papertrail est un ancien transport de winston. Pensez à le mettre à niveau". Il y a une mise à niveau du transport actuellement en suspens.
Jim Jimson
2

Un module 'nodejslogger' peut être utilisé pour une journalisation simple. Il a trois niveaux de journalisation (INFO, ERROR, DEBUG)

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

D: Debug, I: Info, E: Erreur

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

Le module est accessible à l' adresse : https://www.npmjs.com/package/nodejslogger

Rohit Kamal
la source
0

Observez que errorLogger est un wrapper autour de logger.trace . Mais le niveau de l'enregistreur est ERROR, donc logger.trace n'enregistrera pas son message dans les appenders de l' enregistreur .

Le correctif consiste à changer logger.trace en logger.error dans le corps de errorLogger .

Roland Maio
la source