Maison  >  Article  >  Java  >  Comment utiliser la journalisation log4j2 dans Springboot

Comment utiliser la journalisation log4j2 dans Springboot

WBOY
WBOYavant
2023-05-22 08:58:111089parcourir

Framework de journalisation couramment utilisé

  • java.util.logging : Il s'agit du framework de journalisation natif Java introduit par JDK dans la version 1.4

  • Log4j : Un projet open source d'Apache qui peut contrôler la destination du journal transmission des informations. Les consoles, les fichiers, les composants de l'interface graphique, etc. peuvent contrôler le format de sortie de chaque journal. Ceux-ci peuvent être configurés de manière flexible via un fichier de configuration sans modifier le code de l'application. Bien que la maintenance ait été arrêtée, la plupart des entreprises utilisent actuellement log4j.

  • LogBack : C'est une version améliorée de Log4j

  • Log4j2 : Log4j2 n'est pas seulement une version améliorée de Log4j, il a été réécrit du début à la fin

log façade slf4j

Le ci-dessus présente l'implémentation de certains frameworks de log.Ici, nous devons utiliser la façade de log pour résoudre le couplage entre le système et le framework d'implémentation de log. SLF4J, Simple Logging Facade for Java, n'est pas une véritable implémentation de journalisation, mais une couche d'abstraction qui vous permet d'utiliser n'importe quelle implémentation de journalisation en arrière-plan.

Comment utiliser la journalisation log4j2 dans Springboot

Comme les nombreux frameworks de log introduits précédemment, chaque framework de log possède sa propre API distincte. Pour utiliser le framework correspondant, vous devez utiliser son API correspondante, ce qui augmente considérablement le besoin du code d'application pour le framework de log.

Après avoir utilisé slf4j, pour les applications, quelle que soit la façon dont le cadre de journalisation sous-jacent change, l'application peut être mise en ligne directement sans modifier aucune ligne de code.

Pourquoi choisir log4j2

Par rapport à d'autres systèmes de journalisation, log4j2 perd moins de données ; dans un environnement multithread, les performances sont plus de 10 fois supérieures à celles de la connexion, etc. ; de jdk1.5 , réduisant l'apparition de blocages ; La raison des performances supérieures de log4j2 est que log4j2 utilise LMAX, une bibliothèque de communication inter-thread sans verrouillage pour remplacer les files d'attente avant la connexion et log4j. Les performances de concurrence sont grandement améliorées.

Étapes d'intégration

Présentation du package Jar

springboot utilise le framework de journalisation de connexion par défaut, la connexion doit donc être exclue, sinon des erreurs se produiront signalant des conflits de dépendances jar.

<dependency> 
 <groupid>org.springframework.boot</groupid> 
 <artifactid>spring-boot-starter-web</artifactid> 
 <exclusions><!-- 去掉springboot默认配置 --> 
  <exclusion> 
   <groupid>org.springframework.boot</groupid> 
   <artifactid>spring-boot-starter-logging</artifactid> 
  </exclusion> 
 </exclusions> 
</dependency> 

<dependency> <!-- 引入log4j2依赖 --> 
 <groupid>org.springframework.boot</groupid> 
 <artifactid>spring-boot-starter-log4j2</artifactid> 
</dependency>

Fichier de configuration

Si vous personnalisez le nom du fichier, vous devez le configurer dans application.yml

logging:
 config: xxxx.xml
 level:
 cn.jay.repository: trace

Le nom par défaut est log4j2-spring.xml, qui enregistre le modèle de fichier de configuration dans application.yml

log4j utilise un fichier .properties comme fichier de configuration principal, mais maintenant log4j2 a abandonné cette méthode et utilise .xml, .json ou .jsn pour le faire. C'est peut-être aussi le cas. C'est une fatalité technologique. développement, car la lisibilité des fichiers de propriétés est vraiment un peu mauvaise.

<?xml  version="1.0" encoding="UTF-8"?>
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration>
 <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->

 <!--变量配置-->
 <properties>
 <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
 <!-- %logger{36} 表示 Logger 名字最长36个字符 -->
 <property></property>
 <!-- 定义日志存储的路径,不要配置相对路径 -->
 <property></property>
 <property></property>
 </properties>

 <appenders>

 <console>
  <!--输出日志的格式-->
  <patternlayout></patternlayout>
  <!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
  <thresholdfilter></thresholdfilter>
 </console>

 <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
 <file>
  <patternlayout></patternlayout>
 </file>

 <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
 <rollingfile>
  <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
  <thresholdfilter></thresholdfilter>
  <patternlayout></patternlayout>
  <policies>
  <!--interval属性用来指定多久滚动一次,默认是1 hour-->
  <timebasedtriggeringpolicy></timebasedtriggeringpolicy>
  <sizebasedtriggeringpolicy></sizebasedtriggeringpolicy>
  </policies>
  <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
  <defaultrolloverstrategy></defaultrolloverstrategy>
 </rollingfile>

 <!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
 <rollingfile>
  <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
  <thresholdfilter></thresholdfilter>
  <patternlayout></patternlayout>
  <policies>
  <!--interval属性用来指定多久滚动一次,默认是1 hour-->
  <timebasedtriggeringpolicy></timebasedtriggeringpolicy>
  <sizebasedtriggeringpolicy></sizebasedtriggeringpolicy>
  </policies>
  <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
  <defaultrolloverstrategy></defaultrolloverstrategy>
 </rollingfile>

 <!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
 <rollingfile>
  <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
  <thresholdfilter></thresholdfilter>
  <patternlayout></patternlayout>
  <policies>
  <!--interval属性用来指定多久滚动一次,默认是1 hour-->
  <timebasedtriggeringpolicy></timebasedtriggeringpolicy>
  <sizebasedtriggeringpolicy></sizebasedtriggeringpolicy>
  </policies>
  <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
  <defaultrolloverstrategy></defaultrolloverstrategy>
 </rollingfile>

 </appenders>

 <!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。-->
 <!--然后定义loggers,只有定义了logger并引入的appender,appender才会生效-->
 <loggers>

 <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
 <logger>
  <appenderref></appenderref>
 </logger>
 <!--监控系统信息-->
 <!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。-->
 <logger>
  <appenderref></appenderref>
 </logger>

 <root>
  <appender-ref></appender-ref>
  <appender-ref></appender-ref>
  <appender-ref></appender-ref>
  <appender-ref></appender-ref>
  <appender-ref></appender-ref>
 </root>
 </loggers>

</configuration>

Introduction aux paramètres de configuration

Voici une brève introduction aux paramètres de configuration couramment utilisés

Niveau de journalisation

    Mécanisme : Si le niveau d'un message de journal est supérieur ou égal au niveau du fichier de configuration , il sera enregistré.
  • trace : le suivi, qui consiste à faire avancer le programme, vous pouvez écrire une sortie de trace
  • debug : le débogage, généralement au niveau le plus bas, la trace n'est fondamentalement pas utilisée.
  • info : Afficher des informations importantes, couramment utilisées
  • warn : Attention, certaines informations ne sont pas des informations d'erreur, mais elles devraient également donner quelques conseils aux programmeurs.
  • erreur : message d'erreur. Beaucoup utilisé.
  • fatal : Erreur fatale.
  • Source de sortie

    CONSOLE (sortie vers console)
  • FILE (sortie vers fichier)
  • Format

    SimpleLayout : Afficher sous une forme simple
  • HTMLLayout : avec tableau HTML display
  • PatternLayout : affichage du formulaire personnalisé
  • PatternLayout Disposition du journal personnalisé :
%d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间,输出到毫秒的时间
%-5level : 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%c : logger的名称(%logger)
%t : 输出当前线程名称
%p : 日志输出格式
%m : 日志内容,即 logger.info("message")
%n : 换行符
%C : Java类名(%F)
%L : 行号
%M : 方法名
%l : 输出语句所在的行数, 包括类名、方法名、文件名、行数
hostName : 本地机器名
hostAddress : 本地ip地址

Détails de la configuration Log4j2

Configuration du nœud racine

a deux attributs :

    statut
  • intervalle de surveillance
  • a deux sous-nœuds :

    Appenders
  • Loggers (indiquant que plusieurs Appenders et Loggers peuvent être définis
  • status est utilisé pour spécifier le niveau du journal d'impression de log4j lui-même.
).

monitorinterval est utilisé pour spécifier l'intervalle de surveillance pour la reconfiguration automatique de log4j, l'unité est s, le minimum est de 5 s

Le nœud Appenders

a généralement trois sous-nœuds : Console, RollingFile, File

Le nœud Console est utilisé pour. définir la sortie vers l'Appender de Taiwan.

    name : Spécifiez le nom de l'Appender. Habituellement, seule la valeur par défaut est définie sur SYSTEM_OUT, et non sur SYSTEM_ERR
  • PatternLayout : Format de sortie, s'il n'est pas défini, la valeur par défaut est : %m%n.
  • Le nœud Fichier est utilisé pour définir l'Appender qui génère le fichier à l'emplacement spécifié.

name : Spécifiez le nom de l'Appender.

  • fileName:指定输出日志的目的文件带全路径的文件名.

  • PatternLayout:输出格式,不设置默认为:%m%n.

  •  RollingFile节点用来定义超过指定条件自动删除旧的创建新的Appender.

    • name:指定Appender的名字.

    • fileName:指定输出日志的目的文件带全路径的文件名.

    • PatternLayout:输出格式,不设置默认为:%m%n.

    • filePattern : 指定当发生Rolling时,文件的转移和重命名规则.

    • Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志.

    • TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am.

    • SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小.

    • DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。

    Loggers节点,常见的有两种:Root和Logger.

    • Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出

    • level:日志输出级别,共有8个级别,按照从低到高为:All

    • Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。

    • level:日志输出级别,共有8个级别,按照从低到高为:All

    • name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点.

    • AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。

    简单使用

    public class LogExampleOther {
     private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExampleOther.class);
     
     public static void main(String... args) {
     log.error("Something else is wrong here");
     }
    }

    使用lombok工具简化创建Logger类

    lombok就是一个注解工具jar包,能帮助我们省略一繁杂的代码。具体介绍可以看我的这篇教程。

    使用lombok后下面的代码等效于上述的代码,这样会更方便的使用日志。

    @Slf4j
    public class LogExampleOther {
     
     public static void main(String... args) {
     log.error("Something else is wrong here");
     }
    }

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer