ホームページ  >  記事  >  Java  >  SpringBoot 2.x が Log4j2 ログを統合する方法

SpringBoot 2.x が Log4j2 ログを統合する方法

WBOY
WBOY転載
2023-05-30 18:43:241226ブラウズ

    統合手順

    このデモで使用される Springboot のバージョンは 2.7.x です。

    • #依存関係の概要

    • <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>
    • logback ロギング フレームワークの依存関係を除外する必要があります

      spring-boot-starter-logging

    • log4j2 依存関係の紹介

      spring-boot-starter-log4j2

    • ##log4j2 構成ファイルを追加

    • クラスパスに

      log4j2-spring.xml を追加します。または log4j2.xml ファイルの場合は、log4j-spring.xml を使用することをお勧めします。この方法で Spring が初期化を制御できます。

    • 構成をクラスパスに配置せず、場所をカスタマイズする必要がある場合は、構成アイテム

      logging.config: ./log4j2.xml を渡すことができます。構成ファイル内の を変更します。

    SpringBoot 2.x が 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>

    • テストコードを追加

    • #結果の表示

    SpringBoot 2.x が Log4j2 ログを統合する方法

    • Log4j2 構成の詳細log4j2 ログ レベルは、次のように低から高まで続きます。

    • ● トレース: トレースはプログラムを進めるためのもので、トレース出力を書き込むことができます。
    #● デバッグ: デバッグは、一般に最下位レベルとして行われ、トレースは基本的に使用されません。

    SpringBoot 2.x が Log4j2 ログを統合する方法# info: 重要な情報を出力します。頻繁に使用されます。

    # warn: 警告。一部の情報はエラー情報ではありませんが、プログラマにいくつかのヒントを提供します。

    # エラー: エラー メッセージ。たくさん使いました。

    # 致命的: 致命的なエラー。

    ログ メッセージのレベルが設定ファイルのレベル以上の場合、ログ メッセージが記録されます。

    設定ファイルのテンプレートは次のとおりです:

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

    ルート ノードの設定

    属性ステータスは、 log4j 自体のログを出力 Level.

    属性 Monitorinterval は、log4j 自動再構成の監視間隔を指定するために使用されます。単位は s、最小値は 5s です。

      サブノード プロパティ
    • ${xxx} を通じて参照できるグローバル変数を構成します。

    • サブノード アペンダー
    • 一般的なアペンダーは 3 つあります。コンソール、ローリングファイル、およびファイル。

    コンソール ノードは、コンソールへのアペンダー出力を定義するために使用されます。

    name: アペンダーの名前を指定します。

    通常、デフォルトは SYSTEM_ERR ではなく SYSTEM_OUT にのみ設定されます。

      PatternLayout: 出力形式 (設定されていない場合、デフォルトは %m%n) です。
    • File ノードは、指定された場所にファイルを出力するアペンダーを定義するために使用されます。

    • name:アペンダーの名前を指定します。

    fileName: 出力ログの宛先ファイルのフルパスでファイル名を指定します。 PatternLayout: 出力形式 (設定されていない場合、デフォルトは %m%n) です。

    • RollingFile ノードは、古いアペンダーの自動削除と新しいアペンダーの作成を定義するために使用されます。

    • name: Appender の名前を指定します。

    • fileName: ファイル名をフルネームで指定します。出力ログの宛先ファイルのパス。

    PatternLayout: 出力形式 (設定されていない場合、デフォルトは %m%n) です。

      filePattern: ローリング発生時のファイル転送ルールと名前変更ルールを指定します。
    • ##Policies: ローリングログを指定します。いつ新しいログファイルを作成してログを出力するかのポリシーです。
    • TimeBasedTriggeringPolicy:Policies サブノード、時間ベースのローリング戦略。間隔属性はスクロールの頻度を指定するために使用されます。デフォルトは 1 時間です。 modulate=true は時間を調整するために使用されます。たとえば、午前 3 時で間隔が 4 の場合、最初のスクロールは午前 4 時、次に午前 7 時ではなく午前 8 時、午前 12 時...になります。
    • SizeBasedTriggeringPolicy:Policies サブノード。指定されたファイル サイズのローリング戦略に基づいて、size 属性を使用して各ログ ファイルのサイズが定義されます。
    • DefaultRolloverStrategy : 同じフォルダー内のファイルの最大数を指定するために使用されます。複数のログ ファイルがある場合、最も古いログ ファイルの削除と新しいログ ファイルの作成が開始されます (max 属性経由)。
    • サブノード ロガー
    • 一般的なタイプはルートとロガーの 2 つで、ルートは実際には特別なロガーです。ロガーが個別に指定されていない場合は、ルート ログ ノードを使用してプロジェクトのルート ログが決定され、デフォルトでそのルート ログが出力されます。

    • 属性レベル: ログ出力レベル

    • 属性 appenderRef は、ログをどの Appender に出力するかを指定するために使用されます。

    • ロガー ノードは、ログ形式を個別に指定するために使用されます。たとえば、指定したパッケージ内のクラスに異なるログ レベルを指定する場合などです。

    • ロガー ノードの下の属性名は、ロガーが適用できるクラス、またはクラスが配置されているパッケージのフル パスを指定するために使用され、ルートから継承されます。ノード。

    • ロガー ノードの下の属性 appenderRef は、ログがどのアペンダに出力されるかを指定するために使用されます。指定しない場合、デフォルトでルートから継承されます。指定すると、指定したアペンダとルート アペンダの両方に出力されますが、このとき、Logger の additivity="false" を設定してカスタム アペンダのみに出力することができます。

    以上がSpringBoot 2.x が Log4j2 ログを統合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。