Log4js est l'un des meilleurs modules du traitement du journal Node.js. Par rapport à Console ou TJ Debug, les éléments suivants sont indispensables pour les projets Node.js qui sont mis en production:
Cet article vous donnera une introduction complète aux log4js, vous permettant d'utiliser facilement les log4J dans votre projet, le développement et le débogage faciles, et une meilleure surveillance ou dépannage en ligne.
Un petit test
Les trois lignes de code suivantes vous montrent l'utilisation la plus simple de Log4JS:
// Fichier: Simplest.jsvar log4js = require ('log4js'); var logger = log4js.getLogger (); logger.debug ("heure:", new Date ());L'appel .getLogger () peut obtenir une instance logger log4js. L'utilisation de cette instance est la même que celle de la console. Vous pouvez appeler .debug (également .info, .error et d'autres méthodes) pour sortir des journaux.
Exécutez le nœud plus simple.js et la sortie est la suivante:
$ node simlest.js [2016-08-21 00: 01: 24.852] [Debug] [par défaut] - Temps: 2016-08-20t16: 01: 24.852Z
Heure: 2016-08-20T16: 01: 24.852Z est ce que nous voulons produire. Le précédent contient le spécificateur [2016-08-21 00: 01: 24.852] [DEBUG] [Par défaut] est répertorié plus tard.
N'est-ce pas très facile à utiliser? Eh bien, avant de plonger dans l'utilisation avancée des log4js, nous familiariserons d'abord avec les concepts dans log4js.
Niveau
Ce n'est pas difficile à comprendre, c'est le classement des journaux. Ce n'est que lorsque les journaux sont hiérarchiques que les log4J peuvent mieux montrer les journaux américains (différents niveaux de journaux utilisent différentes couleurs dans la console, comme l'erreur est généralement rouge), et lorsque la production, vous pouvez déposer sélectivement les journaux, comme éviter certaines informations sensibles qui appartiennent aux .debugs sont divulguées.
Les journaux de log4js sont divisés en neuf niveaux, et les noms et les poids de chaque niveau sont les suivants:
{All: nouveau niveau (nombre.min_value, "all"), trace: nouveau niveau (5000, "trace"), debug: nouveau niveau (10000, "debug"), info: nouveau niveau (20000, "info"), Warn: New Level (30000, "Warn"), Error: New Level (40000, "Error", Fatal: New Level (50000, "Fatal"), Mark: New: Fatal: New Level (50000, "FATAL") Niveau (9007199254740992, "Mark"), // 2 ^ 53 off: nouveau niveau (numéro.max_value, "off")}Image précédente:
Tous ces deux niveaux ne sont pas directement utilisés dans le code commercial. Les sept autres sont les sept méthodes correspondant à l'instance de journalisation, .trace .debug .info ... en d'autres termes, lorsque vous appelez ces méthodes, cela équivaut à niveler ces journaux. Par conséquent, le précédent [2016-08-21 00: 01: 24.852] [Debug] [par défaut] - Temps: 2016-08-20T16: 01: 24.852Z est le niveau de ce journal.
taper
Log4JS a également un concept appelé catégorie (type). Vous pouvez définir le type d'une instance d'enregistrement et distinguer les journaux en fonction d'une autre dimension:
// Fichier: set-catetory.jsvar log4js = require ('log4js'); var logger = log4js.getLogger ('exemple'); logger.debug ("heure:", new Date ());Lors de l'obtention d'une instance Logger via GetLogger, le seul paramètre qui peut être passé est LoggerCategory (tel que «Exemple»). Ce paramètre spécifie à quelle catégorie l'instance d'enregistrement appartient. C'est la même chose que le débogage de TJ:
var debug = require ('debug') ('worker'); setInterval (function () {debug ('faire du travail');}, 1000);Dans le «travailleur» de débogage, il s'agit également d'une classification des journaux. Ok, reviens et exécutez le nœud set-cateory.js:
[2016-08-21 01: 16: 00.212] [Debug] Exemple - Temps: 2016-08-20T17: 16: 00.212Z
La seule différence par rapport à la précédente [2016-08-21 00: 01: 24.852] [DEBUG] [Par défaut] - Temps: 2016-08-20T16: 01: 24.852Z est que [par défaut] est devenu un exemple.
À quoi sert la catégorie? Il est plus flexible que le niveau et fournit une deuxième dimension de distinction pour les journaux. Par exemple, vous pouvez définir une catégorie différente pour chaque fichier, comme dans set-catetory.js:
// Fichier: set-catetory.jsvar log4js = require ('log4js'); var logger = log4jslogger ('set-catetory.js'); logger.debug ("heure:", new (new ());Vous pouvez voir dans le journal [2016-08-21 01: 24: 07.332] [DEBUG] Set-Catetory.js - Temps: 2016-08-20T17: 24: 07.331Z que ce journal provient du fichier set-catetory.js. Ou utilisez différentes catégories pour différents packages de nœuds, afin que les journaux puissent être distingués à partir de quel module dont ils proviennent.
Appender
Eh bien, maintenant le journal a des niveaux et des catégories, ce qui résout le problème du classement et de la classification des journaux à l'entrée. Dans log4js, le problème d'exportation du journal (c'est-à-dire où la sortie du journal est sortie) est résolu par appender.
Appender par défaut
Voici les paramètres de l'appender par défaut pour Log4JS interne:
// log4js.jsdefaultconfig = {annexes: [{type: "console"}]}Comme vous pouvez le voir, lorsque les journaux ne sont en aucun cas configurés, les journaux sont sortis de la console par défaut.
Configurez votre propre appender
Nous pouvons définir l'appender que nous voulons via log4js.configure.
// file: personnalisé-apprender.jsvar log4js = require ('log4js'); log4js.configure ({annexes: [{type: 'file', nom de fichier: 'default.log'}]}) var logger = log4js.getLogger ('Custom-apprender'); Logger.debug ("Time:", new ());Dans l'exemple ci-dessus, nous publions le journal dans le fichier et exécutons le code. Log4js crée un fichier nommé default.log dans le répertoire actuel. [2016-08-21 08: 43: 21.272] [DEBUG] Custom-Appreder - Temps: 2016-08-21T00: 43: 21.272Z le sort dans le fichier.
L'appender fourni par log4js
La console et le fichier sont tous deux des annexes fournies par Log4J, en plus de ceci:
DATEFILE: Le journal est sorti dans un fichier, et le fichier journal peut être défilé en mode date spécifique, tels que la sortie vers le défaut-2016-08-21.log dès aujourd'hui, et la sortie vers le défaut-2016-08-22.log demain;
SMTP: Sortie du journal en e-mail;
Mailgun: Sortie des journaux à Mailgun via l'API Mailgun;
Levelfilter peut être filtré à niveau;
Et ainsi de suite, quelques autres annexes, vous pouvez voir la liste complète ici.
Filtrage des niveaux et catégories
Nous pouvons ajuster la configuration de l'appender et filtrer les niveaux de journal et les catégories:
// file: niveau-and-category.jsvar log4js = require ('log4js'); log4js log4js.getLogger ('catégorie1'); var logger2 = log4js.getLogger ('catégorie2'); logger1.debug ("heure:", new ()); logger1.trace ("heure:", new ();Exécuter, ajouter un journal à Default.log:
[2016-08-21 10: 08: 21.630] [Debug] Catégorie 1 - Temps: 2016-08-21T02: 08: 21.629Z
Jetons un coup d'œil au code:
Utilisez LogleVelfilter et le niveau pour filtrer les niveaux de journal, et tous les journaux avec des poids supérieurs ou égaux au débogage seront sortis. C'est également la signification du poids du niveau de log mentionné précédemment;
Sélectionnez la catégorie pour sortir les journaux via la catégorie. Les journaux de la catégorie 2 sont filtrés. La configuration accepte également un tableau, tel que [«catégorie 1», «catégorie2»], de sorte que les deux catégories de journaux seront sorties dans le fichier.
Mise en page
La mise en page est une fonctionnalité avancée fournie par log4js. Grâce à la mise en page, nous pouvons personnaliser le format de chaque journal de sortie. Log4js dispose de quatre types de formats intégrés:
MessagePassthrough: Sortie uniquement le contenu du journal;
Basique: l'heure, le niveau de journal et la catégorie seront ajoutés avant le contenu du journal, et la disposition par défaut du journal est généralement ajoutée;
coloré / coloré: ajoutez de la couleur au journal sur la base de Basic, la console appender utilise cette mise en page par défaut;
Modèle: il s'agit d'un type spécial qui peut être défini par n'importe quel format que vous souhaitez.
Un exemple de modèle:
// Fichier: Layout-Pattern.jsvar log4js = require ('log4js'); log4js.Configure ({annexes: [{type: 'console', disposition: {type: 'modèle', modèle: '[% r] [% 5.5p%]] -% m% n'}]}}) Var logger = log4js.getLogger ('Layout-Pattern'); logger.debug ("heure:", new Date ());% R% p $ m $ n est un spécificateur intégré pour les log4J. Vous pouvez l'utiliser pour produire des méta-informations. Pour plus de détails, vous pouvez vous référer à la documentation LOG4JS.
Expliquons le positionnement de l'enregistreur, de l'appender et de la mise en page dans une image.
Pratique: Output Access Log Access.log pour l'application de nœud
Pour faciliter la vérification des problèmes, les journaux des demandes d'application entrant et sortant sont souvent enregistrés dans des environnements de production. Comment l'implémenter à l'aide de log4js? Entrez simplement le code:
// Fichier: server.jsvar log4js = require ('log4js'); var express = required ('express'); log4js express (); app.use (log4js.connectLogger (log4jslogger ('access'), {niveau: log4js.levels.info})); app.get ('/', function (req, res) {res.send ('Front-End Foreign Journal Commentaire');}); App.Listen (5000);Voyez ce que nous avons fait:
Un appender est configuré pour sélectionner un journal avec l'accès à la catégorie dans le journal et le sortir dans un fichier de défilement;
LOG4JS.GetLogger ('Access') obtient une instance d'enregistrement avec un accès de catégorie et le transmet au middleware log4js.connectlogger. Ce middleware recueille les informations d'accès et les imprime via cette instance.
Démarrez le serveur et visitez http: // localhost: 5000. Vous constaterez qu'il existe un fichier supplémentaire nommé Access.log-2016-08-21.log dans le répertoire, qui contient deux journaux:
[2016-08-21 14: 34: 04.752] [Info] Access - :: 1 - - "Get / http / 1.1" 200 18 "" "Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_11_0) Applewebkit / 537.36 (Khtml, comme Gecko) chromé / 52.0.2743.116 SAFARI / 537.36"
[2016-08-21 14: 34: 05.002] [info] Access - :: 1 - - "get /favicon.ico http / 1.1" 404 24 "http: // localhost: 5000 /" "mozilla / 5.0 (Macintosh; Intel Mac OS x 10_11_0) Applewebkit / 537.36 (khtml, comme gecko) Chrome / 52.0.2743.116 Safari / 537.36 "
Grâce à la fonction de classification et de l'appender des journaux log4js, nous publions les journaux d'accès à un fichier mis à jour par défilement.
Résumer
Cet article introduit de manière approfondie l'utilisation de log4js. Par rapport à la console ou à des outils de journalisation simples, Log4JS est plus complexe à utiliser, et bien sûr plus puissant, et convient aux applications au niveau de la production. Si vous êtes intéressé, veuillez laisser un message pour nous le dire. Ensuite, vous pouvez vous présenter comment gérer la configuration dans les applications de nœud.