Existe-t-il une bibliothèque qui m'aide à gérer la journalisation dans mon application Node.Js? Tout ce que je veux, c'est écrire tous les journaux dans un fichier et également avoir 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 la 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'essaie 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 j'ai essayé
log.error ("Hello Error Message");
Mais ça ne fonctionne pas. Y a-t-il quelque chose qui cloche dans cela?
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');
J'ai parcouru de nombreux enregistreurs et je ne pouvais pas trouver de solution légère. J'ai donc décidé de créer une solution simple, publiée sur github.
J'espère que cela vous aide.
http://bluejamesbond.github.io/Scribe.js/
Log4js est l’une des bibliothèques de journalisation les plus populaires pour l’application nodejs.
Il supporte de nombreuses fonctionnalités intéressantes:
Exemple:
Installation: npm install log4js
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 }
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
Vous pouvez également utiliser npmlog par issacs, recommandé dans https://npmjs.org/doc/coding-style.html .
Vous pouvez trouver ce module ici https://github.com/isaacs/npmlog
Le "logger.setLevel ('ERROR');" est la cause du 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 je lance "node logger.test.js", je ne vois que le "message d'erreur" dans le fichier test.log. Si je change le niveau en "TRACE", les deux lignes sont imprimées sur test.log.
Winston est un choix judicieux pour la plupart des développeurs. J'utilise Winston depuis longtemps. Récemment, j'ai utilisé winston with avec papertrail, ce qui porte la journalisation de l'application au niveau supérieur.
Voici une belle capture d'écran de leur site.
Comment son utilité
vous pouvez gérer les journaux de différents systèmes en un seul endroit. Cela peut être très utile lorsque vous avez deux serveurs en communication 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 courrier électronique s'il rencontre un texte spécifique dans le journal.
et vous pouvez trouver plus http://help.papertrailapp.com/kb/how-it-works/event-viewer/
Une configuration simple à l'aide de winston
, winston-express
et winston-papertrail
modules de nœud.
_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 aide quelqu'un à gérer ses journaux!
Un module 'nodejslogger' peut être utilisé pour une journalisation simple. Il a trois niveaux de journalisation (INFO, ERREUR, DÉBOGAGE)
var logger = require('nodejslogger')
logger.init({"file":"output-file", "mode":"DIE"})
D: Débogage, I: Info, E: Erreur
logger.debug("Debug logs")
logger.info("Info logs")
logger.error("Error logs")
Le module est accessible à l’adresse suivante: https://www.npmjs.com/package/nodejslogger
Observez que errorLogger est un wrapper autour de logger.trace. Mais le niveau de journalisation est ERROR alors logger.trace ne consignera pas son message dans les appenders de logger.
Le correctif consiste à changer logger.trace en logger.error dans le corps de errorLogger.