>  기사  >  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>
    • 로그백 로깅 프레임워크 spring-boot-starter-logging의 종속성을 제외해야 합니다spring-boot-starter-logging

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

    • 添加log4j2配置文件

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

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

    log4j2의 종속성 소개spring-boot-starter-log4j2

    SpringBoot 2.x가 Log4j2 로그를 통합하는 방법

    • log4j2 구성 파일 추가

      log4j2-spring.xml 또는 log4j2를 추가하세요. xml을 classpath 파일에 추가하려면 log4j-spring.xml을 사용하는 것이 좋습니다. 이러한 방식으로 spring은 초기화를 제어할 수 있습니다.
    • 클래스 경로에 구성을 넣기를 원하지 않고 위치를 맞춤 설정해야 하는 경우 구성 항목 logging.config: ./log4j2.xml을 통해 구성 파일에서 수정할 수 있습니다. 코드>.

    SpringBoot 2.x가 Log4j2 로그를 통합하는 방법

    • 로그 파일 내용 추가

    다음은 가장 간소화된 구성 내용이며, 다음 섹션에서는 구성에 대해 자세히 설명합니다. 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>

    테스트 코드 추가

    결과 보기

    Log4j2 구성 세부정보

    log4 로그 수준은 다음과 같이 낮은 것부터 높은 것까지입니다.
    • ● 추적: 추적은 프로그램을 발전시키는 것입니다. 추적 출력을 작성할 수 있습니다.

      ● 디버그: 디버깅은 일반적으로 가장 낮은 수준으로 추적은 기본적으로 사용되지 않습니다.
    • ● 정보: 자주 사용되는 중요한 정보 출력

      ● 경고: 경고, 일부 정보는 오류 정보는 아니지만 프로그래머에게 몇 가지 팁을 제공해야 합니다.
    ● 오류: 오류 메시지입니다. 많이 사용되었습니다.

    ● 치명적: 치명적인 오류입니다.

    로그 메시지의 레벨이 구성 파일의 레벨보다 크거나 같으면 기록됩니다.

    구성 파일 템플릿은 다음과 같습니다.

    <?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>
    루트 노드 구성

    • 속성 status는 log4j 인쇄 로그 자체의 수준을 지정하는 데 사용됩니다. monitorinterval 속성은 자동 모니터링 간격을 지정하는 데 사용됩니다. log4j의 재구성 단위는 s이고 최소값은 5s입니다.

    • Sub-node Properties

      ${xxx}
    • Sub-node Appenders

      를 통해 참조할 수 있는 전역 변수를 구성합니다. 어펜더: 콘솔, RollingFile 및 파일.

    Console 노드는 콘솔에 대한 Appender 출력을 정의하는 데 사용됩니다.

    • name: Appender의 이름을 지정합니다.

    • 일반적으로 기본값은 SYSTEM_ERR

    • PatternLayout이 아닌 SYSTEM_OUT으로만 설정됩니다. : 출력 형식, 설정되지 않은 경우 기본값은 %m%n입니다.

    File 노드는 지정된 위치에 파일을 출력하는 Appender를 정의하는 데 사용됩니다.

      fileName: 출력 로그를 지정합니다. 대상 파일에는 전체 경로가 포함된 파일 이름이 있습니다.
    • PatternLayout: 설정되지 않은 경우 기본값은 %m%n입니다.
    • RollingFile 노드는 지정된 조건을 초과하는 이전 Appender의 자동 삭제를 정의하고 새 Appender를 생성하는 데 사용됩니다.

    • name: Appender의 이름을 지정합니다.
    • fileName: 전체 경로로 파일 이름을 지정합니다.
    • PatternLayout: 출력 형식, 설정되지 않은 경우 기본값은 %m%n입니다.
    • filePattern: 롤링이 발생할 때 파일 전송 및 이름 바꾸기 규칙을 지정합니다.
    • Policies: 새 로그 파일을 생성하고 로그를 출력할 시기인 롤링 로그 정책을 지정합니다.
    • TimeBasedTriggeringPolicy:Policies 하위 노드, 시간 기반 스크롤 전략, 간격 속성을 사용하여 스크롤 빈도를 지정합니다. , 기본값은 1시간입니다. modulate=true는 시간을 조정하는 데 사용됩니다. 예를 들어 오전 3시이고 간격이 4인 경우 첫 번째 스크롤은 오전 7시 대신 오전 4시, 오전 8시, 오전 12시... 대신에 발생합니다.

    SizeBasedTriggeringPolicy :정책 하위 노드, 파일 크기의 롤링 전략을 지정합니다. 크기 속성은 각 로그 파일의 크기를 정의하는 데 사용됩니다.

    • DefaultRolloverStrategy: 동일한 폴더에 있는 최대 로그 파일 수를 지정하는 데 사용됩니다. 가장 오래된 것을 삭제하고 새로운 것을 생성하기 시작합니다( max 속성을 통해).

    • 하위 노드 로거

      루트와 로거의 두 가지 일반적인 유형이 있습니다. 루트는 실제로 특별한 종류의 로거입니다. 별도의 로거 지정이 없을 경우 루트 로그 노드를 사용하여 프로젝트의 루트 로그를 판단하고, 기본적으로 해당 루트 로그를 출력합니다. 🎜🎜🎜🎜속성 수준: 로그 출력 수준 🎜🎜🎜🎜속성appenderRef, 로그가 출력되는 Appender를 지정하는 데 사용됩니다. 🎜
    • 로거 노드는 로그 형식을 개별적으로 지정하는 데 사용됩니다. 예를 들어 지정된 패키지 아래의 클래스에 대해 서로 다른 로그 수준을 지정하는 등입니다.

    • 로거 노드 아래의 속성 이름은 로거가 적용 가능한 클래스나 해당 클래스가 위치한 패키지의 전체 경로를 지정하는 데 사용되며 루트 노드에서 상속됩니다.

    • 로거 노드 아래의appenderRef 속성은 로그가 출력될 Appender를 지정하는 데 사용됩니다. 지정하지 않으면 기본적으로 루트에서 상속됩니다. 지정하면 지정된 어펜더와 루트 어펜더 모두에 출력됩니다. 이때 Logger의 additivity="false"를 사용자 정의 어펜더에서만 출력하도록 설정할 수 있습니다.

    위 내용은 SpringBoot 2.x가 Log4j2 로그를 통합하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제