Maison  >  Article  >  Java  >  Comment Springboot utilise Logback pour implémenter la configuration des journaux

Comment Springboot utilise Logback pour implémenter la configuration des journaux

WBOY
WBOYavant
2023-05-16 09:07:051401parcourir

Overview

Par défaut, SpringBoot utilise en interne la connexion comme cadre pour l'implémentation des journaux système, qui génère des journaux sur la console et n'écrit pas dans les fichiers journaux. S'ils sont configurés dans application.properties ou application.yml, seuls des scénarios simples, des chemins d'enregistrement, des formats de journaux, etc. peuvent être configurés. Les scénarios complexes (distinction entre les journaux d'informations et d'erreurs, génération d'un fichier journal chaque jour, etc.) ne peuvent pas être satisfaits, vous ne pouvez donc personnaliser que le fichier de configuration logback-spring.xml ou logback.xml.

Explication détaillée de la configuration de la connexion

Tout d'abord, comprenons la connexion.

logback est principalement divisé en trois modules :

  • logback-core : est le module de base des deux autres modules

    # 🎜 🎜#
  • logback-classic : C'est une extension du module de base et équivaut à une version améliorée de log4j. Le module classique implémente l'API Slf4j afin qu'il puisse être facilement commuté avec d'autres frameworks de journalisation

  • logback-access : Intégrez le conteneur Servlet pour fournir la fonctionnalité de journal d'accès http.

logback configuration

1.application .properties

#🎜🎜 ## Configuration des informations d'impression du journal
logging.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>

Situation anormale

J'ai rencontré un problème étrange après avoir configuré la connexion selon la configuration ci-dessus, la plupart des projets peuvent s'exécuter normalement et enregistrer les journaux dans des fichiers, mais lorsqu'un projet démarre, signalez un problème. erreur.

Le système de journalisation n'a pas réussi à s'initialiser à l'aide de la configuration de 'classpath:logback-spring.xml'
java.lang.IllegalStateException : impossible d'initialiser la journalisation de journalisation à partir de classpath:logback-spring.xml
    sur org.springframework.boot.logging.logback .LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:168)
    sur org.springframework.boot.logging.AbstractLoggingSystem.initializeWithSpecificConfig(AbstractLoggingSystem.java:66)
    sur org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:57 )
    sur org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:132)
    sur org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:316)
    sur org.springframework .boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:282)
    sur org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:240)
    sur org.springframework.boot.context.logging .LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:216)
    sur org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)
    sur org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(Simple ApplicationEventMulticaster.java : 169 )
    sur org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)
    sur org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131)
    sur org.springframework.boot .contexte .event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:85)
    sur org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66)
    sur java.util.ArrayList.forEach(ArrayList.ja va:1257)
    sur org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
    sur org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114)
    sur org.springframework.boot. SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners. java:65)
    sur org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:339)
    sur org.springframework.boot.SpringApplication.run(SpringApplication.java:297)
    sur org.springframework.boot.SpringApplication. run(SpringApplication.java:1312)
    sur org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
    sur cn.piesat.ScanningApplication.main(ScanningApplication.java:18)
Causé par : ch.qos. logback.core.joran.spi.JoranException : une erreur de configuration de l'analyseur s'est produite
    sur ch.qos.logback.core.joran.event.SaxEventRecorder.buildSaxParser(SaxEventRecorder.java:89)
    sur ch.qos.logback.core.joran. event.SaxEventRecorder.recordEvents(SaxEventRecorder.java:57)
    sur ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:151)
    sur ch.qos.logback.core.joran.GenericConfigurator.doConfigure( GenericConfigurator.java:110)
    sur ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
    sur org.springframework.boot.logging.logback.LogbackLoggingSystem.configureByResourceUrl(LogbackLoggingSystem.java:188)
    sur org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:165)
    ... 22 de plus
Causé par : org.xml.sax.SAXNotSupportedException : fonctionnalité : http://xml.org/ sax/features/external-general-entities
    sur org.apache.crimson.parser.XMLReaderImpl.setFeature(XMLReaderImpl.java:211)
    sur org.apache.crimson.jaxp.SAXParserImpl.setFeatures(SAXParserImpl.java:143)
sur org.apache.crimson.jaxp.SAXParserImpl.7e51f00a783d7eb8f68358439dee7daf(SAXParserImpl.java:126)
    sur org.apache.crimson.jaxp.SAXParserFactoryImpl.newSAXParserImpl(SAXParserFactoryImpl.java:113)
    sur org.apache .pourpre. 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>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer