Cet article présente principalement la configuration de SLF4J + Logback dans Java Engineering.
Avant d'introduire la configuration de la connexion SLF4J +, introduisez d'abord le journal de connexion du composant journal.
(1) L'introduction et la configuration de la journalisation du composant journal
1. Introduction à la connexion
Logback est un autre composant de journal open source conçu par le fondateur de Log4j. Le journal de connexion est actuellement divisé en trois modules: Logback-Core, Logback-Classic et Logback-Activity. Logback-Core est le module de base des deux autres modules. Logback-Classic est une version améliorée de Log4j. De plus, Logback-Classic implémente entièrement l'API SLF4J afin que vous puissiez facilement le remplacer par d'autres systèmes de journalisation tels que la journalisation LOG4J ou JDK14. Le module d'accès à accès à enregistrement s'intègre aux conteneurs Servlet pour fournir la fonction d'accès aux journaux via HTTP. Logback est le site officiel qui combine deux composants avec SLF4J comme suit:
Site officiel de Logback: http://logback.qos.ch
Site officiel de SLF4J: http://www.slf4j.org
Les composants utilisés dans cet article sont les suivants: Veuillez vous rendre sur le site officiel pour télécharger!
Logback-Access -.0.0.jar
Logback-classic -.0.0.jar
Logback-core-1.0.0.jar
Slf4j-api-1.6.0.jar
2. Raisons de la journalisation pour remplacer Log4j:
Logback et Log4j sont très similaires. Voici quelques avantages de la connexion sur Log4J:
1. Implémentez plus rapidement la réécriture du noyau de la journalisation, et les performances augmentent de plus de 10 fois sur certains chemins d'exécution clés. De plus, la connexion améliore non seulement les performances, mais a également moins de charges de mémoire initialisées.
2. Le journal de rogne de test très complet a été testé depuis quelques années, d'innombrables heures. Le test de Logback est complètement différent. Du point de vue de l'auteur, il s'agit d'une raison simple et importante de choisir la logback au lieu de log4j.
3. Logback-classic est naturellement implémenté avec SLF4J Logback-Classic pour atteindre SLF4J. Dans l'utilisation de SLF4J, vous ne pouvez pas ressentir le logback-classic. De plus, parce que Logback-Classic implémente SLF4J très naturellement, le passage à Log4J ou à un autre est très facile.
4. Le site officiel du document complet a plus de 200 pages de documents.
5. Recharger automatiquement le fichier de configuration en tant que modification du fichier de configuration, le logback-classic peut automatiquement recharger le fichier de configuration. Le processus de numérisation est rapide et sûr, il n'a pas besoin de créer un autre thread de balayage. Cette technologie garantit entièrement que l'application peut fonctionner dans l'environnement JEE.
6. Lilith Lilith est un observateur de l'incident du log, similaire à la tronçonneuse de log4j. Lilith peut également traiter de grandes quantités de données de journal.
7. Mode de mise en garde et récupération très conviviale en mode prudence, plusieurs instances FileAppender exécutées sous plusieurs JVM et peuvent écrire en toute sécurité le même fichier journal. RollingFileAPpender aura certaines limites. FileAppender de Logback et ses sous-classes, y compris RollingFileAppender, peuvent se remettre des exceptions d'E / S très sympathiques.
8. Les fichiers de configuration peuvent gérer différentes situations. Ces fichiers de configuration ne sont que de petites différences, qui peuvent être implémentées et implémentées, afin qu'un fichier de configuration puisse s'adapter à plusieurs environnements.
9. Filtres (filtres) Parfois, un problème est requis et un journal est nécessaire. Dans LOG4J, ne réduisant que le niveau de journal, mais cela fera beaucoup de journaux et affectera les performances de l'application. À Logback, vous pouvez continuer à maintenir ce niveau de journal et supprimer certains cas spéciaux. Pour atteindre cette fonction, il vous suffit d'ajouter 4 lignes de configuration XML. Vous pouvez vous référer à MDCFilter.
10. SiftingApener (un appender très multifonctionnel) Il peut être utilisé pour diviser le fichier journal en fonction des paramètres de fonctionnement donnés. Par exemple, SiftingAPPeNder peut distinguer la session de l'utilisateur qui suit la session de l'utilisateur, puis chaque utilisateur aura un fichier journal.
11. Compressez automatiquement le journal RollingFileAppender qui a été touché. La compression est un processus asynchrone, donc même pour les grands fichiers journaux, les applications ne seront pas affectées dans le processus de compression.
12. L'arbre de pile a une version de package de la journalisation.
13. Supprimez automatiquement l'ancien fichier de journal en définissant la propriété maxhistorale de la base de temps en temps de temps ou sizeandtimebasedfnatp. Si Maxhistory 12 est défini, les fichiers journaux qui ont dépassé 12 mois seront automatiquement supprimés.
En bref, la connexion est meilleure que Log4J.
3. Introduction à la configuration de la connexion
1. Enregistreur, appender et mise en page
Enregistreur, en tant que enregistreur du journal, l'associe sur le contexte correspondant qui est utilisé, est principalement utilisé pour stocker les objets logarithmiques.
L'appenner est principalement utilisé pour spécifier la destination de la sortie du journal.
La mise en page est responsable de la sortie de l'événement en une chaîne, des informations de journal formatées.
2. Contexte d'enregistrement
Chaque enregistreur est associé à un logger Context. Tous les autres enregistreurs ont également été obtenus via la méthode statique de la classe org.slf4j.loggerfactory getlogger. La méthode GetLogger est nommée par Logger. Utilisez le même nom pour appeler la méthode LoggerFactory.getLogger.
3. Héritage de niveaux et de niveaux efficaces
Logger peut être attribué. Les niveaux incluent: Trace, débogage, info, avertissement et erreur, défini dans ch.qos.logback.classic.level. Si l'enregistreur n'est pas attribué, il héritera du niveau de l'ancêtre le plus proche du niveau de distribution. Le niveau de défaut de Root Logger est de débogage.
4. Méthode d'impression et règles de sélection de base <Br /> Méthodes d'impression déterminent le niveau de la demande. Par exemple, si L est une instance d'enregistrement, alors l'instruction l.info ("..") est une déclaration d'enregistrement avec une information de niveau. Le niveau d'une demande de journal est appelé activé lorsqu'il est supérieur ou égal au niveau valide de son enregistreur, sinon il est appelé désactivé. Le niveau de demande d'enregistrement est P et le niveau valide de l'enregistreur est Q.
Cette règle est au cœur de la journalisation. Le tri de niveau est: trace <debug <info <warn <error
4. Configuration par défaut de Logback <Br /> Si les fichiers de configuration logback-sest.xml et logback.xml n'existent pas, le logback appellera BasicConfigurator par défaut pour créer une configuration minimisée. Pour minimiser la configuration composée d'un consoleaudeppender associé à un enregistreur racine. Le mode de sortie est% d {hh: mm: ss.sss} [% thread]% -5level% logger {36} -% msg% n's Patternlayoutendcoder. Le niveau de défaut de Root Logger est de débogage.
1. Le fichier de configuration de la connexion
La syntaxe du fichier de configuration de la connexion est très flexible. En raison de la flexibilité, le schéma DTD ou XML ne peut pas être défini. Néanmoins, vous pouvez décrire la structure de base du fichier de configuration de cette manière: démarrer par <Fonfiguration>, il n'y a aucun éléments ou plus <ppender>, zéro ou plus <logger> et un maximum d'éléments <hoot>.
2. Les étapes de la configuration par défaut de la connexion
(1).
(2).
(3).
3. Fichier Logback.xml
<? nom appender = "stdout"> <! - Sortie logarithmique Encoding-> <Ocoding> utf-8 </coding> <laayout> <! - Sortie du format:% d signifie la date,% du thread indique le nom de thread,% - 5Level: Niveau 5 Largeur des caractères de l'affichage gauche 5 Caractéristique Largeur% MSG: Message de journal,% n est un symbole de changement-> <ustern>% d {yyyy-mm-dd hh: mm: ss.sss} [% thread]% - 5Level% Logger {50} -% msg% n </match> </ Layout> </Prender> <! - Générer tous les jours Files journaux-> <ppender name = "file"> <coding> utf-8 </ Encodage> <rollingPolicy> <! - Le nom de fichier sortit par le fichier journal-> <filenamepattern> $ {log_home} /myapp.log.% d {yyyy-mm-dd}. / maxhistory> </ rollingpolice> <alayout> <! - Sortie formulée:% d représente la date,% thread représente le nom de thread,% d représente le nom de thread,% -5level: 5 caractères largeur affichée à partir du msg de gauche%: Message log,% n est un caractéristique de changement-> <mattern>% d {yyyy-mm-dd hh: mm: ss.sss} [% thread]% -5level% logger {50} -% msg% n </ motif > </ Layout> <! - La plus grande taille du fichier journal-> <DistigeringPolice> <AxFileSize> 10Mb </maxFileSize> </stigningPolice> </ Appen Der> <! - Afficher les paramètres pour HiberNate SQL dédié à la personnalisation de Hibernate -> <Logger name = "Organnate.type.descriptor.sql.basicBinder =" Trace "/> <logger =" org.hibernate. org.hibernate.sql "niveau =" def "/> <log. Erameters" niveau = "debug" /> <logger name = "org.hibernate.engine.qury.hqlQueryPlan" niveau = "debug" /> <! - Log Output Level-> <root niveau = "info"> <ppender-ref = "stdout" /> <ppender-ref ref = "file" /> </ root> <! - Logs à la base de données-> <ppender name = "DB"> <! Databasename </url> <ser utilisateur> root </ user> <password> root </ mot de passe> </ dataSource> </ Connectionsource> </Pender> -> </FIGIGRUENNE >> </FIGIGURATION >> </ Configuration>> </ Configuration >> 5. Utiliser la connexion de référence dans le programme
package com.stu.system.action; classe);
Ensuite, introduisons la configuration de la connexion SLF4J + dans le projet Java.
1. Maven-Configuration Logback Pom.xml basée à Maven
<dependency> <proupId> org.slf4j </prôdId> <Artifactid> SLF4J-API </ artifactive> <version> 1.7.10 </-version> </dependency> <proupId> C H.qos.logback </rom grouped> <ArtefactId> Logback-classic </refactId> <Sease> 1.1.2 </DERNIFICATION> </DEDENDECY> <G.QOS. / version> </ dépendance>
2. Créez un nouveau fichier de configuration Logback.xml dans le répertoire de ClassPath
<? xml version = "1.0" Encoding = "UTF-8"?> <! - Scan: Lorsque cette propriété est définie sur true, si le fichier de configuration change, il sera rechargé et que la valeur par défaut est vraie. ScanPeriod: définit l'intervalle de temps pour surveiller s'il y a une modification du fichier de configuration. L'intervalle de temps par défaut est de 1 minute. Debug: lorsque cet attribut est défini sur true, les informations de journal interne de la connexion seront imprimées pour vérifier l'état exécuté de la journalisation en temps réel. La valeur par défaut est fausse. -> <configuration scan = "false" scanPeriod = "60 seconds" debug = "false"> <! - Définissez le répertoire racine du journal -> <propriété name = "log_home" value = "/ app / log "/> <! - Définir le nom du fichier journal -> <propriété name =" appname "value =" nety "> </ propriété> <! - ch.qos.logback.core.consoleAppender indique la sortie de la console -> <Appender name = "stdout"> <coding> utf-8 </coding> <! - Format de sortie du journal:% d Moyenne Date,% thread indique le nom du thread,% - 5Level: niveau 5 la largeur de caractères de 5 caractères à partir de gauche% %%%%% 5 Largeur des caractères %%%%%gu Logger {50} signifie que le nom de l'enregistreur est de 50 caractères, sinon il sera divisé en fonction de la période. % MSG: Message logarithmique,% N est un changement de lignes-> <ageft> <mattern>% d {yyyy-mm-dd hh: mm: s.sss} [% thread]% -5level% logger {50} - % msg% n </mattern> </payout> </Prender> <! - Faites défiler pour enregistrer le fichier, enregistrez d'abord le journal dans le fichier spécifié, et lorsqu'une certaine condition est remplie, enregistrez le journal à d'autres fichiers- -> <appender name = "ApplogAPPENDEN"> <ONODING> UTF-8 </ Encoding> <! - Le nom du fichier journal désigné-> <fichier> $ {log_home} / $ {appname} .log </fichier> <! -> <RollingPolicy> <! - L'emplacement de stockage et le nom du fichier du fichier généré pendant le rolling% d {yyyy-mm-dd}: rouleau de jour en jour. appname} -% d {yyyy-mm-dd} -% i.log </ filenamepattern> <! - Node facultatif, contrôlez le fichier d'archive réservé le plus important si la quantité dépasse la quantité, supprimez l'ancien fichier. En supposant qu'il est roulé tous les jours et que maxhistory est 365, seul le dernier fichier 365-jour est enregistré pour supprimer l'ancien fichier avant. Notez que les anciens fichiers sont supprimés et que les répertoires créés pour les archives seront également supprimés. -> <maxhistory> 365 </maxhistory> <! - La taille du fichier journal dépasse MaxFilesize, et le fichier journal roulant en fonction du% que j'ai mentionné ci-dessus, prêtez l'attention à la configuration size baskedtricgepolicy. Time baséFileNamingAndtriggerringPolicy> <AxFileSize> 100Mb </ maxFileSize> </ TimeBasedFilenamingan dtrigringPolicy> </ RollingPolicy> <! - Format de sortie du journal:% D représente la date de temps,% Thread indique le nom de thread,% - 5Level: le niveau de 5 caractères à partir de la date de L'affichage de gauche 5 caractères% enregistreur {50} indique que le nom de l'enregistreur est de 50 caractères, sinon il sera divisé en fonction de la période. % MSG: Message logarithmique,% N est un changement de lignes-> <laayout> <mattern>% d {yyyy-mm-dd hh: mm: s.sss} [% thread] - [% -5level] [% enregistreur {50}:% line] -% msg% n </match> </payout> </ appender> <! - Logger est principalement utilisé pour stocker les objets journaliers. Il peut également définir le type de journal et le nom de niveau: La première moitié du niveau du package: le niveau de journal à enregistrer, y compris la trace <debug <info <warn <ajout d'erreur: la fonction est de savoir si le logger des enfants utilise l'appender configuré par RootLogger pour la sortie, faux: cela signifie que seulement L'appender du journaliste actuel est utilisé -ref, true: l'appender-ref et rootlogger du logger actuel et rootlogger-refs sont efficaces-> <! - Hibernate Logger-> <logger name = "org.hibernate" = "Erreur" /> <! "niveau =" info "additivité =" true "> <ppender-ref ref =" applogAppender "/> </ogromger> <! - Root et logger est la relation entre le père et le fils. S'il n'y a pas de définition spéciale, c'est par défaut. -> <root niveau = "info"> <ppender-ref = "stdout" /> <ppender-ref = "applogAPPender" /> </ root> </ configuration>