Maison  >  Article  >  Java  >  Comment SpringBoot 2.x intègre les journaux Log4j2

Comment SpringBoot 2.x intègre les journaux Log4j2

WBOY
WBOYavant
2023-05-30 18:43:241223parcourir

    Étapes d'intégration

    La version Springboot utilisée dans cette démonstration est la 2.7.x.

    • Introduction aux dépendances

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
    • Vous devez exclure la dépendance du framework de journalisation des logbacks spring-boot-starter-loggingspring-boot-starter-logging

    • 引入log4j2的依赖spring-boot-starter-log4j2

    • 添加log4j2配置文件

    • 在classpath下添加log4j2-spring.xml或者log4j2.xml文件,建议使用log4j-spring.xml,这种方式spring可以控制初始化。

    • 如果你不想把配置放到classpath下,需要自定义位置, 可以在配置文件中通过配置项logging.config: ./log4j2.xml

    Introduire la dépendance de log4j2spring-boot-starter-log4j2

    Comment SpringBoot 2.x intègre les journaux Log4j2

    • Ajouter le fichier de configuration log4j2

      Ajouter log4j2-spring.xml ou log4j2. xml dans le fichier classpath , il est recommandé d'utiliser log4j-spring.xml De cette façon, spring peut contrôler l'initialisation.
    • Si vous ne souhaitez pas mettre la configuration sur le chemin de classe et devez personnaliser l'emplacement, vous pouvez le modifier dans le fichier de configuration via l'élément de configuration logging.config: ./log4j2.xml code>.

    Comment SpringBoot 2.x intègre les journaux Log4j2

    • Ajouter le contenu du fichier journal

    Ce qui suit est le contenu de configuration le plus simplifié, et la section suivante explique la configuration en détail. Comment SpringBoot 2.x intègre les journaux Log4j2

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration monitorInterval="5">
        <!--变量配置-->
        <Properties>
            <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
            <!-- %logger{36} 表示 Logger 名字最长36个字符 -->
            <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
            <!-- 定义日志存储的路径 -->
            <property name="FILE_PATH" value="./logs"/>
            <property name="FILE_NAME" value="log4j2Demo"/>
        </Properties>
    
        <appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <!--设置日志格式及颜色-->
                <PatternLayout
                        pattern="%style{%d{ISO8601}}{bright,green} %highlight{%-5level} [%style{%t}{bright,blue}] %style{%C{}}{bright,yellow}: %msg%n%style{%throwable}{red}"
                        disableAnsi="false" noConsoleNoAnsi="false"/>
            </Console>
    
            <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
            <File name="Filelog" fileName="${FILE_PATH}/test.log" append="false">
                <PatternLayout pattern="${LOG_PATTERN}"/>
            </File>
    
            <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
            <RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log"
                         filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz">
                <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="${LOG_PATTERN}"/>
                <Policies>
                    <!--interval属性用来指定多久滚动一次,默认是1 hour-->
                    <TimeBasedTriggeringPolicy interval="1"/>
                    <SizeBasedTriggeringPolicy size="10MB"/>
                </Policies>
                <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
                <DefaultRolloverStrategy max="15"/>
            </RollingFile>
    
            <!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
            <RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log"
                         filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz">
                <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
                <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="${LOG_PATTERN}"/>
                <Policies>
                    <!--interval属性用来指定多久滚动一次,默认是1 hour-->
                    <TimeBasedTriggeringPolicy interval="1"/>
                    <SizeBasedTriggeringPolicy size="10MB"/>
                </Policies>
                <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
                <DefaultRolloverStrategy max="15"/>
            </RollingFile>
    
            <!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
            <RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log"
                         filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz">
                <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="${LOG_PATTERN}"/>
                <Policies>
                    <!--interval属性用来指定多久滚动一次,默认是1 hour-->
                    <TimeBasedTriggeringPolicy interval="1"/>
                    <SizeBasedTriggeringPolicy size="10MB"/>
                </Policies>
                <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
                <DefaultRolloverStrategy max="15"/>
            </RollingFile>
    
        </appenders>
    
        <!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。-->
        <!--然后定义loggers,只有定义了logger并引入的appender,appender才会生效-->
        <loggers>
            <root level="info">
                <appender-ref ref="Console"/>
                <appender-ref ref="Filelog"/>
                <appender-ref ref="RollingFileInfo"/>
                <appender-ref ref="RollingFileWarn"/>
                <appender-ref ref="RollingFileError"/>
            </root>
        </loggers>
    
    </configuration>

    Ajouter le code de test

    Afficher les résultats

    Détails de configuration Log4j2

    log4 j 2 niveaux de log de bas en haut, comme suit :
    • Quantity trace : Le traçage consiste à faire avancer le programme, vous pouvez écrire une sortie de trace

      weight debug : le débogage, généralement au niveau le plus bas, la trace n'est fondamentalement pas utilisée.
    • gird info : afficher des informations importantes, souvent utilisées

      givertir : Attention, certaines informations ne sont pas des informations d'erreur, mais elles doivent également donner quelques conseils au programmeur.
    weight erreur : message d'erreur. Beaucoup utilisé.

    weight fatal : erreur fatale.

    Si le niveau d'un message de journal est supérieur ou égal au niveau du fichier de configuration, il sera enregistré.

    Le modèle de fichier de configuration est le suivant :

    <?xml version="1.0" encoding="UTF-8"?>
    <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
    <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
    <configuration monitorInterval="5">
      <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
    
      <!--变量配置-->
      <Properties>
        <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
        <!-- %logger{36} 表示 Logger 名字最长36个字符 -->
        <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
        <!-- 定义日志存储的路径 -->
        <property name="FILE_PATH" value="更换为你的日志路径" />
        <property name="FILE_NAME" value="更换为你的项目名" />
      </Properties>
    
      <appenders>
    
        <console name="Console" target="SYSTEM_OUT">
          <!--输出日志的格式-->
         <PatternLayout
                        pattern="%style{%d{ISO8601}}{bright,green} %highlight{%-5level} [%style{%t}{bright,blue}] %style{%C{}}{bright,yellow}: %msg%n%style{%throwable}{red}"
                        disableAnsi="false" noConsoleNoAnsi="false"/>
          <!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
          <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
        </console>
    
        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
        <File name="Filelog" fileName="${FILE_PATH}/test.log" append="false">
          <PatternLayout pattern="${LOG_PATTERN}"/>
        </File>
    
        <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz">
          <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
          <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
          <PatternLayout pattern="${LOG_PATTERN}"/>
          <Policies>
            <!--interval属性用来指定多久滚动一次,默认是1 hour-->
            <TimeBasedTriggeringPolicy interval="1"/>
            <SizeBasedTriggeringPolicy size="10MB"/>
          </Policies>
          <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
          <DefaultRolloverStrategy max="15"/>
        </RollingFile>
    
        <!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz">
          <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
          <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
          <PatternLayout pattern="${LOG_PATTERN}"/>
          <Policies>
            <!--interval属性用来指定多久滚动一次,默认是1 hour-->
            <TimeBasedTriggeringPolicy interval="1"/>
            <SizeBasedTriggeringPolicy size="10MB"/>
          </Policies>
          <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
          <DefaultRolloverStrategy max="15"/>
        </RollingFile>
    
        <!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz">
          <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
          <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
          <PatternLayout pattern="${LOG_PATTERN}"/>
          <Policies>
            <!--interval属性用来指定多久滚动一次,默认是1 hour-->
            <TimeBasedTriggeringPolicy interval="1"/>
            <SizeBasedTriggeringPolicy size="10MB"/>
          </Policies>
          <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
          <DefaultRolloverStrategy max="15"/>
        </RollingFile>
    
      </appenders>
    
      <!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。-->
      <!--然后定义loggers,只有定义了logger并引入的appender,appender才会生效-->
      <loggers>
    
        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
        <logger name="org.mybatis" level="info" additivity="false">
          <AppenderRef ref="Console"/>
        </logger>
        <!--监控系统信息-->
        <!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。-->
        <Logger name="org.springframework" level="info" additivity="false">
          <AppenderRef ref="Console"/>
        </Logger>
    
        <root level="info">
          <appender-ref ref="Console"/>
          <appender-ref ref="Filelog"/>
          <appender-ref ref="RollingFileInfo"/>
          <appender-ref ref="RollingFileWarn"/>
          <appender-ref ref="RollingFileError"/>
        </root>
      </loggers>
    
    </configuration>
    Configuration du nœud racine

    • L'attribut status est utilisé pour spécifier le niveau du journal d'impression log4j lui-même. L'attribut monitorinterval est utilisé pour spécifier l'intervalle de surveillance pour l'automatisation. reconfiguration de log4j. L'unité est s, et le minimum est 5s.

    • Propriétés du sous-nœud

      configurez les variables globales, qui peuvent être référencées via ${xxx}
    • Appendeurs de sous-nœud

      Il existe trois éléments communs. Appenders : console, RollingFile et fichier.

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

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

    • Habituellement, la valeur par défaut est uniquement 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 de fichier est utilisé pour définir l'Appender qui génère le fichier à l'emplacement spécifié.

    • name : Spécifie le nom de. the Appender.

    • fileName : Spécifie le journal de sortie. Le fichier de destination a un nom de fichier avec un chemin complet

    • PatternLayout : Format de sortie, s'il n'est pas défini, la valeur par défaut est : 

    • .
    • Le nœud RollingFile est utilisé pour définir la suppression automatique des anciens appenders qui dépassent les conditions spécifiées et créer de nouveaux appenders.

    • name : Spécifiez le nom de l'Appender
    • fileName : Spécifiez le nom du fichier avec le chemin complet. du fichier de destination pour le journal de sortie.
    • PatternLayout : Format de sortie, s'il n'est pas défini, la valeur par défaut est : %m%n .
    • filePattern : Spécifiez les règles de transfert et de renommage du fichier lors du roulement.

    Policies : spécifiez la politique de journalisation continue, qui indique le moment où créer un nouveau fichier journal et afficher le journal.

    • TimeBasedTriggeringPolicy : Policies Nœud enfant, stratégie de défilement basée sur le temps, l'attribut d'intervalle est utilisé pour spécifier la fréquence de défilement. , la valeur par défaut est 1 heure. module=true permet d'ajuster l'heure : par exemple, il est 3h du matin, et l'intervalle est de 4, puis le premier scroll est à 4h, puis 8h, 12h... au lieu de 7h.

    • SizeBasedTriggeringPolicy :Sous-nœud Politiques, basé sur Spécifier la stratégie de roulement de la taille du fichier L'attribut size est utilisé pour définir la taille de chaque fichier journal

      🎜🎜DefaultRolloverStrategy : utilisé pour spécifier le nombre maximum de fichiers journaux dans le même dossier. pour commencer à supprimer les plus anciens et à en créer de nouveaux (via l'attribut max). 🎜🎜🎜🎜Enregistreurs de nœuds enfants🎜🎜Il existe deux types courants : root et logger Root est en fait un enregistreur spécial. Si aucun enregistreur n'est spécifié séparément, le nœud de journal racine sera utilisé pour déterminer le journal racine du projet et afficher ce journal racine par défaut. 🎜🎜🎜🎜Niveau d'attribut : niveau de sortie du journal 🎜🎜🎜🎜Attribut appenderRef, utilisé pour spécifier vers quel Appender le journal est sorti. 🎜
    • Le nœud enregistreur est utilisé pour spécifier le formulaire de journal individuellement, par exemple, pour spécifier différents niveaux de journalisation pour les classes d'un package spécifié, etc.

    • Le nom de l'attribut sous le nœud logger est utilisé pour spécifier la classe à laquelle le Logger est applicable ou le chemin complet du package où se trouve la classe, et est hérité du nœud racine.

    • L'attribut appenderRef sous le nœud logger est utilisé pour spécifier vers quel Appender le journal est sorti. S'il n'est pas spécifié, il sera hérité de la racine par défaut. S'il est spécifié, il sera affiché à la fois dans l'appender spécifié et dans l'appender racine. À ce stade, nous pouvons définir l'additivity="false" du Logger pour qu'il soit affiché uniquement dans l'appender personnalisé.

    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