Rumah >Java >javaTutorial >Cara Springboot menggunakan Logback untuk melaksanakan konfigurasi log

Cara Springboot menggunakan Logback untuk melaksanakan konfigurasi log

WBOY
WBOYke hadapan
2023-05-16 09:07:051432semak imbas

Ikhtisar

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.

Penjelasan terperinci tentang konfigurasi log balik

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.

konfigurasi log balik

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>

Situasi tidak normal

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam