>  기사  >  Java  >  log4j를 springboot와 통합할 때 오류를 해결하는 방법

log4j를 springboot와 통합할 때 오류를 해결하는 방법

王林
王林앞으로
2023-05-11 10:07:051817검색

    1. 종속성 추가

    종속성 추가에는 사용할 버전을 결정하는 것이 좋습니다.

    <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-to-slf4j</artifactId>
            <version>2.11.2</version>
    </dependency>

    1.2. 종속성 제거

    springboot에는 기본적으로 로그에 대한 지원이 내장되어 있으며 모두 제거해야 합니다. 그렇지 않으면 log4j 종속성 사용에 영향을 미칩니다.

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
            <exclusions>
                <exclusion>
                   <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
    </dependency>

    2. 구성 로그

    2.1. 로그 인쇄 기록

     필요에 따라 관련 구성을 구성해야 합니다. 여기서 주의할 점은 구성에 xml 파일을 사용하고, 속성을 사용하는 것입니다. , 요구 사항이 없으며 구성 파일에 지정됩니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration  scan="true" scanPeriod="10 seconds">
        <contextName>beordie</contextName>
        <property name="path" value="E:\file\javalearn\blog\src\main\resources\logs" />
        <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
        <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
        <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
        <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>info</level>
            </filter>
            <encoder>
                <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${path}/debug.log</file>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>debug</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${log}/info.log</file>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>info</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${log}/warn.log</file>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>warn</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${log}/error.log</file>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <springProfile name="dev">
            <logger name="com.beordie" level="debug"/>
        </springProfile>
    
        <root level="info">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
        </root>
    </configuration>

    2.2. 구성 파일 지정

    스프링 부트의 프로젝트 구성 파일에도 구성을 지정해야 합니다.

    logging:
      config: classpath:log4j.xml

    여기에서 로그의 전체 구성을 완료합니다. 프로젝트를 시작하고 다음 명령문을 통해 로그 개체를 가져와서 로그를 인쇄합니다.

    private final Logger LOGGING = LoggerFactory.getLogger(ArticleController.class);

    추가됨: log4j 튜닝 및 예방 조치

    로그 모드 - 동기/비동기

    log4j2는 AsyncAppender 및 AsyncLogger는 물론 전역 비동기도 제공합니다. 열기 방법은 다음과 같습니다.

      동기 모드: 기본 구성은 다음과 같습니다. 동기 모드, 즉 AsyncAppender 및 AsyncLogger가 사용되지 않습니다.
    • 글로벌 비동기: 구성이 동기 방식으로 구성됩니다. 구성 및 애플리케이션을 수정하지 않고 jvm 시작 매개변수를 추가하여 글로벌 비동기를 켤 수 있습니다.
    • 혼합 비동기: 비동기 로거와 동기 로거의 혼합 구성을 사용하고 전역 비동기를 활성화하지 않습니다. 즉, 로거 구성의 일부는 AsyncLogger이고 일부는 Logger입니다.
    로그 모드 사용 시 주의 사항:

      비동기를 사용하는 경우 AsyncAppender 대신 AsyncLogger 구현을 사용하는 것이 좋습니다.
    • 동기화를 사용하는 경우 AsyncLogger, AsyncAppender 및 전역 비동기 중 하나만 사용할 수 있습니다. AsyncAppender와 AsyncLogger를 동시에 구성하거나 비동기가 구성된 경우 전역 비동기를 활성화할 수 없습니다.
    로그 롤링 및 삭제 전략

    log4j2는 파일 크기 기반 롤링 전략과 시간 기반 롤링 전략을 제공하거나 두 가지를 함께 사용할 수 있습니다. 크기 기반 롤링 전략 구성 및 크기/ 시간 기반 이중 롤링 정책 구성:

      크기 기반 롤링 정책: 크기별 롤, 압축 활성화 및 최대 N개 파일 유지
    • 크기/시간 기반 이중 롤 롤링 정책: 크기별 롤 및 시간, 압축 활성화, 단위 일정 기간 내에 보관되는 최대 로그 수를 제어하고 총 로그 보관 시간을 제어합니다.

    위 내용은 log4j를 springboot와 통합할 때 오류를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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