Lorsque le programme d'arrière-plan est développé et lancé, l'impression d'informations de journal et l'enregistrement du journal de journal sont généralement utilisés. Pendant le développement, l'impression des informations sur les journaux peut rapidement localiser le problème et nous aider à nous développer rapidement. Si un bogue ou une erreur se produit une fois le programme en ligne, des enregistrements de journal sont nécessaires pour trouver le problème.
Spring Boot peut intégrer de nombreux systèmes de journalisation différents, parmi lesquels l'Apache Log4j, la plus couramment utilisée, et LOG4J 2 est une version améliorée de Log4J, qui a apporté de nombreuses améliorations significatives par rapport à Log4J 1.X. Ce blog parlera donc directement de la façon dont Spring Boot intègre et configure Log4j2.
1. Importer le package log4j2
Si vous utilisez Gradle, ajoutez les dépendances suivantes dans le fichier build.gradle. La méthode Gradle est utilisée dans l'exemple de code.
Dépendances {// Log4J2 Compile "org.apache.logging.log4j: log4j-api: 2.8" compile "org.apache.logging.log4j: log4j-core: 2.8" // utilisé pour prendre en charge la compilation asynchrone dans Logger 'com.lmax: Disrupteur: 3.3.6'}Si vous utilisez Maven, ajoutez les dépendances suivantes dans le fichier pom.xml.
<Dependances> <Dependency> <GroupId> org.apache.logging.log4j </proncId> <ArtifActid> Log4j-API </ Artifactid> <DERVIÈRE> 2.8 </ Version> </ Dependency> <Dedency> <ProupID> org.apache.logging.log4j </proupId> <ArtifActid> log4j-core </ artifactive> 2.88 <prider> </Dependency> <Dependency> <ProupId> com.lmax </rompuprid> <ErtifactId> Disruptor </ artifactId> <DERSE> 3.3.6 </ version> </Dependency> </Dependces>
2. Ajouter un fichier de configuration log4j2
Créez le fichier log4j2.xml dans le répertoire racine du fichier de ressources de ressources du projet et copiez le code suivant dans le fichier.
<? xml version = "1.0" Encoding = "UTF-8"?> <! - L'état après la configuration est utilisé pour définir la sortie d'informations dans LOG4J2 lui-même. Il ne peut pas être défini. Lorsqu'il est défini sur Trace, vous verrez diverses sorties détaillées dans LOG4J2. Peut être défini sur (off) ou l'erreur (uniquement les informations d'erreur de sortie) -> <configurationstatus = "OFF"> <! - Directory de fichiers journal et configuration de fichier compressé -> <preperties> <propriétéName = "PropertyName"> / Home / Kylin / Log / Knight / Spring_Log </ Property> <propriéténame = "Filegz"> / Home / Kylin / Log / Knight / Knight / Spring_ </properties> <nexe des annexes> <! - Configuration des journaux de console de sortie -> <consolename = "console" cible = "System_out"> <! - La console ne produit que des informations au niveau et au-dessus (onMatch), et d'autres refus directs (OnMismatch) -> <thatresholdfilterlevel = "Info" OnMatch = "Accept" OnMismat <PatternlayoutPattern = "% d {hh: mm: ss.sss} [% t]% -5level% logger {36} -% msg% n" /> </console> <! - Imprimez toutes les informations. Chaque fois que la taille dépasse la taille, le journal de cette taille sera automatiquement stocké dans le dossier créé par mois et compressé en tant qu'archive -> <rollingRandomAccessFileName = "InfoFile" filename = "$ {filename} /web-info.log" immédiateflush = "false" filepattern = "$ {filegz} / $$ {date: yyyy-mm} / app-% d {mm-dd-yyyy} -% i.web-info.gz"> <pathlayoutpattern = "% d {yyyy-mm-dd 'à' hh: mm: ss z} [% t] % msg% xex% n "/> <golitiques> <TimeBasedTriggergPolicyInterval =" 6 "modulate =" true "/> <sizebasedtriggergPolicySize =" 50 Mo "/> </golicies> <filters> <! - Enregistrer uniquement les informations et les informations de niveau d'avertissement -> <ThresholdFilterlevel =" Error "OnMatch =" Deny "OnMismsat) <Thresholdfilterlevel = "info" onmatch = "accepter" onMismatch = "deny" /> </filters> <! - Spécifiez le nombre maximum de paquets compressés par jour, par défaut 7, s'il dépasse le précédent, il écrasera -> <fEfaultrolloverstrategyMax = "50" /> </ rollingrandomAccessFile> <RollingRandomAccessFileName = "errorFile" filename = "$ {filename} /web-error.log" immédiateflush = "false" filepattern = "$ {filegz} / $$ {date: anyy-mm} / app-% d {mm-dd-yyyy}-% i.web-ror.gz"> <PatternlayoutPattern = "% d {yyyyy-mm-dd 'à' hh: mm: ss z} [% t]% -5level% logger {36}% l% m -% msg% xex% n" /> <grachives> <TimebasedtriggergPoligyInterval = "6" modulare = "True" /> <SizebasedTrighG </goriques> <filters> <! - Enregistrez uniquement les informations de niveau d'erreur -> <thresholdfilterlevel = "error" onmatch = "accepter" onMismatch = "deny" /> </filters> <! - Spécifiez le nombre maximum de paquets compressés par jour, par défaut 7, s'il dépasse le précédent, il enverra -> <faultrolloversttrategygymax = "50" /> " </ Rollingrandomaccessfile> </neckers> <! - Spécifiez le nombre maximum de paquets compressés par jour, la valeur par défaut est 7, et la précédente sera remplacée -> <defaulTrolloverstrategyMax = "50" /> </ RollingrandomAccessFile> Asyncroot - journalisation asynchrone - nécessite la prise en charge de Lmax Disruptor -> <asyncrootlevel = "info" additivité = "false"> <appenRefref = "console" /> <appenderRefref = "InfoFile" /> <PrenderRefref = "ErrorFile"3. Écrivez la classe auxiliaire log4j2
Après avoir effectué la configuration ci-dessus, nous pouvons écrire une classe auxiliaire pour nous rendre plus pratique pour nous utiliser LOG4J2 pour enregistrer les journaux.
Créez un fichier de classe L.java dans le package UTILS.
package com.spring.log4j2.utils; import org.apache.logging.log4j.logmanager; import org.apache.logging.log4j.logger; / ** * Logger de la classe Auxiliary * * créée par Kylin le 2017/5/11. * / public classll {private static final logger logger = logManager.getLogger (); privatel () {/ * ne peut pas être instancié * / lancer un nouveau UnsupportedOperationException ("ne peut pas être instancié"); } publicStatingLoggerGetLogger () {return Logger; } publicStaticVoidT (String msg) {logger.trace (msg); } publicStaticVoidd (String msg) {logger.debug (msg); } publicStaticVoidi (String msg) {logger.info (msg); } publicStaticVoidw (String msg) {logger.warn (msg); } publicStaticVoide (String msg) {Logger.Error (msg); }}Après avoir écrit la classe auxiliaire, il est très simple à utiliser et il peut être facilement utilisé via le code suivant.
@ControllerPublic classwebController {@RequestMapping ("/") PublicStRingIndex () {String msg = "Configuration et utilisation de Log4J2 dans Spring Boot Series"; LT (MSG); LD (MSG); Li (msg); Lw (msg); Le (msg); return "index"; }}La classe auxiliaire ici n'écrit que quelques méthodes d'utilisation de base, vous pouvez les personnaliser en fonction de vos besoins et ajouter plus de méthodes auxiliaires. Pour les méthodes non fournies dans la classe d'aide, vous pouvez également utiliser la méthode L.GetLogger () pour utiliser l'instance Logger à utiliser.
4. Vérification des résultats
Note de niveau des journaux: trace <debug <info <warn <error <fatal.
Parce que le niveau de mon log4j2 est défini au niveau des informations. Par conséquent, seuls trois niveaux d'informations, avertissements et erreurs peuvent être vus dans les informations d'impression (les informations au niveau mortel ne sont pas imprimées, sinon elles peuvent être vues).
Les informations d'impression sont présentées dans la figure ci-dessous:
Dans le même temps, un fichier journal a été généré dans le système informatique, comme indiqué dans la figure ci-dessous:
En observant le chemin, vous pouvez constater que ce chemin est exactement le chemin défini dans log4j2.xml:
<! - Directory de fichiers journaux et configuration du répertoire de fichiers compressé -> <propriétés> <propriétéName = "FileName"> / home / kylin / log / knight / printemps_log </ propriété> <propriéténame = "filegz"> / home / kylin / log / knight / spring_log / 7z </ propriété> </ Properties>
5. Plus
Adresse GitHub de log4j2: https://github.com/apache/logging-log4j2
L'exemple d'adresse de code de ce tutoriel: https://github.com/dkylin/springboot-sample/tree/master/springboot-log4j2
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.