>Java >java지도 시간 >Springboot가 Logback을 사용하여 로그 구성을 구현하는 방법

Springboot가 Logback을 사용하여 로그 구성을 구현하는 방법

WBOY
WBOY앞으로
2023-05-16 09:07:051483검색

개요

기본적으로 SpringBoot는 로그를 콘솔에 출력하고 로그 파일에 쓰지 않는 시스템 로그 구현을 위한 프레임워크로 내부적으로 로그백을 사용합니다. application.properties 또는 application.yml에 구성하면 간단한 시나리오, 저장 경로, 로그 형식 등만 구성할 수 있습니다. 복잡한 시나리오(정보와 오류 로그 구분, 매일 로그 파일 생성 등)는 만족할 수 없으므로 구성 파일 logback-spring.xml 또는 logback.xml만 사용자 정의할 수 있습니다.

로그백 구성에 대한 자세한 설명

먼저 로그백에 대해 알아보겠습니다.

Logback은 주로 세 가지 모듈로 나뉩니다.

  • logback-core: 다른 두 모듈의 기본 모듈입니다.

  • logback-classic: 코어 모듈의 확장으로 개선된 버전에 해당합니다. log4j의 클래식 모듈은 Slf4j API를 구현하므로 다른 로그 프레임워크와 쉽게 직접 전환할 수 있습니다.

  • logback-access: Servlet 컨테이너와 통합하여 http 액세스 로그 기능을 제공합니다. KLogBack 구성

1.Application .properties

# 로그 인쇄 정보 구성

Logging.config = ClassPath: LogBack-SPRING.XML


2 LogBack.xml

<?mybatis version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>logback</contextName>
    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
             <level>ERROR</level>
         </filter>-->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 日志文件会滚动 -->
        <!-- 文件路径 -->
        <file>./logs/gf_scanning.log</file><!-- 当前的日志文件存放路径 -->
        <!-- 日志滚动策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 历史日志文件的存放路径和名称 -->
            <fileNamePattern>./logs/gf_scanning.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 日志文件最大的保存历史 数量-->
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <!-- 日志文件中日志的格式 -->
        </encoder>
    </appender>
    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>
</configuration>
e
비정상적인 상황

이 발생했습니다. 이상한 문제가 발생했습니다.위 구성에 따라 logback을 구성하면 대부분의 프로젝트가 정상적으로 실행되고 로그를 파일에 저장할 수 있지만 한 프로젝트가 시작될 때 오류가 발생했습니다.

로깅 시스템이 'classpath:logback-spring.xml'의 구성을 사용하여 초기화하지 못했습니다.
java.lang.IllegalStateException: org.springframework.boot.logging.logback의 classpath:logback-spring.xml
에서 로그백 로깅을 초기화할 수 없습니다. .LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:168)
    org.springframework.boot.logging.AbstractLoggingSystem.initializeWithSpecificConfig(AbstractLoggingSystem.java:66)
    org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:57 )
    org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:132)
    org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:316)
    org.springframework에서 .boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:282)
    at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:240)
    at org.springframework.boot.context.logging .LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:216)
    org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)
    org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java :169 )
    org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)
    org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131)
    org.springframework.boot.context에서 .event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:85)
    at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66)
    java.util.ArrayList.forEach(ArrayList.java:1257)
    에서 org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
    에서 org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114)
    에서 org.springframework.boot.SpringApplicationRunListeners.envir onmentPrepared(SpringApplicationRunListeners. java:65)
    org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:339)
    org.springframework.boot.SpringApplication.run(SpringApplication.java:297)
    org.springframework.boot.SpringApplication에 있습니다. run(SpringApplication.java:1312)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
    at cn.piesat.ScanningApplication.main(ScanningApplication.java:18)
원인: ch.qos. logback.core.joran.spi.JoranException: ch.qos.logback.core.joran.event.SaxEventRecorder.buildSaxParser(SaxEventRecorder.java:89)
    ch.qos.logback.core.joran에서 파서 구성 오류가 발생했습니다. event.SaxEventRecorder.recordEvents(SaxEventRecorder.java:57)
    ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:151)
    ch.qos.logback.core.joran.GenericConfigurator.doConfigure( GenericConfigurator.java:110)
    at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
    at org.springframework.boot.logging.logback.LogbackLoggingSystem.configureByResourceUrl(LogbackLoggingSystem.java:188)
    org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:165)
    ... 22개 더보기
원인: org.xml.sax.SAXNotSupportedException: 기능: http://xml.org/ sax/features/external-general-entities
    org.apache.crimson.parser.XMLReaderImpl.setFeature(XMLReaderImpl.java:211)
    org.apache.crimson.jaxp.SAXParserImpl.setFeatures(SAXParserImpl.java:143)
org.apache.crimson.jaxp.SAXParserImpl.7e51f00a783d7eb8f68358439dee7daf(SAXParserImpl.java:126)
    at org.apache.crimson.jaxp.SAXParserFactoryImpl.newSAXParserImpl(SAXParserFactoryImpl.java:113)
    org.apache.crimson . jaxp.SAXParserFactoryImpl.setFeature(SAXParserFactoryImpl.java:141)
    at ch.qos.logback.core.joran.event.SaxEventRecorder.buildSaxParser(SaxEventRecorder.java:82)
    ... 28 more
Disconnected from the target VM, address: '127.0.0.1:64222', transport: 'socket'

Process finished with exit code 1

可能是由于jar包冲突,在pom文件中单独引入logback-core的依赖后,问题解决。

<!-- logback 日志 -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.7</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
    <exclusions>
        <exclusion>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

위 내용은 Springboot가 Logback을 사용하여 로그 구성을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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