Rumah  >  Artikel  >  Java  >  Bagaimana SpringBoot 2.x menyepadukan log Log4j2

Bagaimana SpringBoot 2.x menyepadukan log Log4j2

WBOY
WBOYke hadapan
2023-05-30 18:43:241271semak imbas

    Langkah integrasi

    Versi springboot yang digunakan dalam demonstrasi ini ialah 2.7.x.

    • Pengenalan Kebergantungan

    <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>
    • Anda perlu mengecualikan kebergantungan rangka kerja log balikspring-boot-starter-logging

    • Perkenalkan kebergantungan log4j2spring-boot-starter-log4j2

    • Tambah fail konfigurasi log4j2

    • Tambah fail log4j2-spring.xml atau log4j2.xml di bawah laluan kelas Adalah disyorkan untuk menggunakan log4j-spring.xml Dengan cara ini, spring boleh mengawal permulaan.

    • Jika anda tidak mahu meletakkan konfigurasi pada laluan kelas dan perlu menyesuaikan lokasi, anda boleh mengubah suainya melalui item konfigurasi logging.config: ./log4j2.xml dalam fail konfigurasi.

    Bagaimana SpringBoot 2.x menyepadukan log Log4j2

    • Tambah kandungan fail log

    di bawah Melalui kandungan konfigurasi yang paling diperkemas, bahagian seterusnya menerangkan konfigurasi secara terperinci.

    <?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>
    • Tambah kod ujian

    Bagaimana SpringBoot 2.x menyepadukan log Log4j2

    • Lihat keputusan

    Bagaimana SpringBoot 2.x menyepadukan log Log4j2

    Penjelasan terperinci konfigurasi Log4j2

    peringkat log log4j2 dari rendah ke tinggi, seperti berikut:

    ● Jejak: Pengesanan adalah untuk memajukan program, anda boleh menulis keluaran jejak

    ● Nyahpepijat: Nyahpepijat, secara amnya sebagai tahap terendah, jejak pada dasarnya tidak digunakan.

    ● maklumat: Keluarkan maklumat penting, yang biasa digunakan

    ● amaran: Amaran, sesetengah maklumat bukanlah maklumat ralat, tetapi ia juga harus memberikan beberapa petua kepada pengaturcara.

    ● ralat: mesej ralat. Banyak digunakan.

    ● maut: kesilapan maut.

    Jika tahap mesej log lebih besar daripada atau sama dengan tahap fail konfigurasi, ia akan direkodkan.

    Templat fail konfigurasi adalah seperti berikut:

    <?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>

    Konfigurasi nod akar

    • Status atribut digunakan untuk menentukan log cetak log4j itu sendiri.

    • Selang pemantauan atribut digunakan untuk menentukan selang pemantauan untuk konfigurasi semula automatik log4j, unit ialah s, minimum ialah 5s.

    Sifat nod anak

    mengkonfigurasi pembolehubah global, yang boleh dirujuk melalui ${xxx}.

    Penambah nod anak

    Terdapat tiga Penambah biasa : Konsol, RollingFile dan Fail.

    Nod Konsol digunakan untuk mentakrifkan output Appender pada konsol

    • nama: Tentukan nama Appender

    • Biasanya lalai hanya ditetapkan kepada SYSTEM_OUT, bukan SYSTEM_ERR

    • PatternLayout: Format output, jika tidak ditetapkan, lalainya ialah: %m%n.

    Nod fail digunakan untuk mentakrifkan Appender yang mengeluarkan fail ke lokasi yang ditentukan.

    • nama: Tentukan nama Penampil.

    • Nama fail: Tentukan nama fail dengan laluan penuh fail destinasi untuk log keluaran.

    • Reka Letak Corak : Format output, jika tidak ditetapkan, lalainya ialah: %m%n.

    Nod RollingFile digunakan untuk menentukan pemadaman automatik yang lama dan penciptaan Penambah baharu apabila ditentukan syarat telah dilebihi. daripada fail destinasi untuk log output.

      PatternLayout: Format output, jika tidak ditetapkan, lalainya ialah: %m%n.
    • Pola fail: Tentukan peraturan pemindahan dan penamaan semula fail apabila Rolling berlaku.
    • Dasar: Tentukan log rolling Dasar ialah masa untuk mencipta fail log baharu dan mengeluarkan log
    • TimeBasedTriggeringPolicy:Policies sub-nod, strategi rolling berasaskan masa, atribut interval digunakan untuk menentukan kekerapan menatal, lalai ialah 1 jam . modulate=true digunakan untuk melaraskan masa: contohnya, pada pukul 3 pagi, dan selangnya ialah 4, kemudian tatal pertama pada pukul 4 pagi, kemudian pukul 8 pagi, 12 pagi... bukannya pukul 7 pagi.
    • SizeBasedTriggeringPolicy:Policies subnod, berdasarkan strategi rolling saiz fail yang ditentukan, atribut saiz digunakan untuk menentukan saiz setiap fail log.
    • DefaultRolloverStrategy : digunakan untuk menentukan bilangan maksimum fail dalam folder yang sama Apabila terdapat beberapa fail log mula memadam yang paling lama dan mencipta yang baharu (melalui atribut maks).
    • Logger nod anak
    • mempunyai dua jenis biasa: root dan Root sebenarnya adalah pembalak khas. Jika tiada pembalak dinyatakan secara berasingan, nod log akar akan digunakan untuk menentukan log akar projek dan mengeluarkan log akar tersebut secara lalai.

    • Tahap atribut: Tahap keluaran log

    Atribut appenderRef, digunakan untuk menentukan Appender log keluaran.

  • Nod logger digunakan untuk menentukan borang log secara individu, seperti menentukan tahap log yang berbeza untuk kelas di bawah pakej yang ditentukan.

  • Nama atribut di bawah nod logger digunakan untuk menentukan kelas yang Logger boleh digunakan atau laluan penuh pakej di mana kelas itu terletak, dan diwarisi daripada akar nod.

  • Atribut appenderRef di bawah nod logger digunakan untuk menentukan Appender log keluaran Jika tidak dinyatakan, ia akan diwarisi daripada akar secara lalai. Jika dinyatakan, ia akan dikeluarkan dalam kedua-dua appender yang ditentukan dan appender root Pada masa ini, kita boleh menetapkan tambahan Logger = "false" kepada hanya output dalam appender tersuai.

  • Atas ialah kandungan terperinci Bagaimana SpringBoot 2.x menyepadukan log Log4j2. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam