기본적으로 SpringBoot는 로그를 콘솔에 출력하고 로그 파일에 쓰지 않는 시스템 로그 구현을 위한 프레임워크로 내부적으로 로그백을 사용합니다. application.properties 또는 application.yml에 구성하면 간단한 시나리오, 저장 경로, 로그 형식 등만 구성할 수 있습니다. 복잡한 시나리오(정보와 오류 로그 구분, 매일 로그 파일 생성 등)는 만족할 수 없으므로 구성 파일 logback-spring.xml 또는 logback.xml만 사용자 정의할 수 있습니다.
먼저 로그백에 대해 알아보겠습니다.
Logback은 주로 세 가지 모듈로 나뉩니다.
logback-core: 다른 두 모듈의 기본 모듈입니다.
logback-classic: 코어 모듈의 확장으로 개선된 버전에 해당합니다. log4j의 클래식 모듈은 Slf4j API를 구현하므로 다른 로그 프레임워크와 쉽게 직접 전환할 수 있습니다.
logback-access: Servlet 컨테이너와 통합하여 http 액세스 로그 기능을 제공합니다. KLogBack 구성
# 로그 인쇄 정보 구성
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!