Rumah >Java >javaTutorial >Cara Springboot menggunakan Logback untuk melaksanakan konfigurasi log
Secara lalai, SpringBoot secara dalaman menggunakan log balik sebagai rangka kerja untuk pelaksanaan log sistem, yang mengeluarkan log ke konsol dan tidak menulis ke fail log. Jika dikonfigurasikan dalam application.properties atau application.yml, hanya senario mudah, menyimpan laluan, format log, dsb. boleh dikonfigurasikan. Senario yang rumit (membezakan antara maklumat dan log ralat, menjana fail log setiap hari, dsb.) tidak boleh berpuas hati, jadi anda hanya boleh menyesuaikan fail konfigurasi logback-spring.xml atau logback.xml.
Mula-mula, mari kita fahami log balik.
logback terbahagi terutamanya kepada tiga modul:
logback-core: ialah modul asas bagi dua modul lain
logback-classic: Ia adalah lanjutan daripada modul teras, bersamaan dengan versi log4j yang lebih baik. Modul klasik melaksanakan API Slf4j, jadi ia boleh ditukar dengan mudah dengan rangka kerja pengelogan lain
akses log balik: Sepadukan dengan bekas Servlet untuk menyediakan fungsi log akses http.
1.application .properties
# Konfigurasi maklumat pencetakan log
log. config=classpath:logback-spring.xml
2.logback-spring.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>
Terhadap sesuatu yang pelik Masalahnya ialah selepas mengkonfigurasi log balik mengikut konfigurasi di atas, kebanyakan projek boleh berjalan seperti biasa dan menyimpan log ke fail, tetapi satu projek melaporkan ralat semasa bermula. java.lang.IllegalStateException: Could not initialize Logback logging from classpath:logback-spring.xml ... Caused by: ch.qos.logback.core.joran.spi.JoranException: Parser configuration error occurred
Sistem pengelogan gagal dimulakan menggunakan konfigurasi daripada 'classpath:logback-spring.xml'
java.lang.IllegalStateException: Tidak dapat memulakan pengelogan Log Balik daripada classpath:logback-spring.xml
di org .springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:168)
di org.springframework.boot.logging.AbstractLoggingSystem.initializeWithSpecificConfig(at 6 AbstractLogging kerja.but .logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:57)
di org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:132)
.springwork.org. .LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:316)
di org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:282)
.springframework.springerlogging atwork org.springframework. .onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:240)
at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:216)
org ulticaster.doInvokeListener(SimpleApplicationEventMulticaster .java:176)
di org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)
atplication org.springframework.context.event.SimpleApplicationEventMulticaster. ster.java:143)
di org.springframework.context.event.SimpleApplicationEventMulticast.multicastEvent(SimpleApplicationEventMulticaster.java:131)
at org.springframework.boot.context.event.EventPublishing.unjavaListen. )
di org .springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66)
di java.util.ArrayList.forEach(ArrayList.java:1257)
org doWithListeners( SpringApplicationRunListeners.java:120)
di org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114)
at org.springunframeworkRunListeners.SpringApplicationRunListeners. unListeners.java:65)
at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:339)
di org.springframework.boot.SpringApplication.run(SpringApplication.java:297)
di org. SpringApplication.java:1312)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
at cn.piesat.ScanningApplication.main(ScanningApplication.java:18>)di ch.qos.logback.core.joran.event.SaxEventRecorder.buildSaxParser(SaxEventRecorder.java:89)
at ch. qos.logback.core.joran.event.SaxEventRecorder.recordEvents(SaxEventRecorder.java:57)
di ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:151)
. qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
di ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
spring frame. boot.logging.logback.LogbackLoggingSystem.configureByResourceUrl(LogbackLoggingSystem.java:188)
di org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:188)Disebabkan oleh: org.xml.sax.SAXNotSupportedException: Ciri: http://xml.org/sax/features/external-general-entities
di org.apache.crimson.parser.XMLReaderImpl.setFeature(XMLReaderImpl.java. :211)
di org.apache.crimson.jaxp.SAXParserImpl.setFeatures(SAXParserImpl.java:143)
di org.apache.crimson.jaxp.SAXParserImpl.<2SAXParserImpl.<6
di org.apache.crimson.jaxp.SAXParserFactoryImpl.newSAXParserImpl(SAXParserFactoryImpl.java:113)
di org.apache.crimson.jaxp.SAXParserImpl.FactoryParser. 1)
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>
Atas ialah kandungan terperinci Cara Springboot menggunakan Logback untuk melaksanakan konfigurasi log. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!