logback配置详解首先我们先了解下logback。
logback 主要分为三个模块:
logback-core:是其他两个模块的基础模块
logback-classic:是对 core 模块的扩展,相当于 log4j 的改良版。classic 模块实现了 slf4j 的 api 因此可以便于和其他日志框架直接切换
logback-access:与servlet容器集成,以提供http访问日志功能。
logback配置1.application .properties
# 日志打印信息配置
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>
异常情况遇到个奇怪的问题,按上述配置完成logback的配置后,大多项目可以正常运行并保存日志到文件,但有一个项目启动时报错。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
logging system failed to initialize using configuration from 'classpath:logback-spring.xml'
java.lang.illegalstateexception: could not initialize logback logging from classpath:logback-spring.xml
at org.springframework.boot.logging.logback.logbackloggingsystem.loadconfiguration(logbackloggingsystem.java:168)
at org.springframework.boot.logging.abstractloggingsystem.initializewithspecificconfig(abstractloggingsystem.java:66)
at org.springframework.boot.logging.abstractloggingsystem.initialize(abstractloggingsystem.java:57)
at org.springframework.boot.logging.logback.logbackloggingsystem.initialize(logbackloggingsystem.java:132)
at org.springframework.boot.context.logging.loggingapplicationlistener.initializesystem(loggingapplicationlistener.java:316)
at 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)
at org.springframework.context.event.simpleapplicationeventmulticaster.doinvokelistener(simpleapplicationeventmulticaster.java:176)
at org.springframework.context.event.simpleapplicationeventmulticaster.invokelistener(simpleapplicationeventmulticaster.java:169)
at org.springframework.context.event.simpleapplicationeventmulticaster.multicastevent(simpleapplicationeventmulticaster.java:143)
at org.springframework.context.event.simpleapplicationeventmulticaster.multicastevent(simpleapplicationeventmulticaster.java:131)
at org.springframework.boot.context.event.eventpublishingrunlistener.environmentprepared(eventpublishingrunlistener.java:85)
at org.springframework.boot.springapplicationrunlisteners.lambda$environmentprepared$2(springapplicationrunlisteners.java:66)
at java.util.arraylist.foreach(arraylist.java:1257)
at org.springframework.boot.springapplicationrunlisteners.dowithlisteners(springapplicationrunlisteners.java:120)
at org.springframework.boot.springapplicationrunlisteners.dowithlisteners(springapplicationrunlisteners.java:114)
at org.springframework.boot.springapplicationrunlisteners.environmentprepared(springapplicationrunlisteners.java:65)
at org.springframework.boot.springapplication.prepareenvironment(springapplication.java:339)
at org.springframework.boot.springapplication.run(springapplication.java:297)
at 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)
caused by: ch.qos.logback.core.joran.spi.joranexception: parser configuration error occurred
at ch.qos.logback.core.joran.event.saxeventrecorder.buildsaxparser(saxeventrecorder.java:89)
at ch.qos.logback.core.joran.event.saxeventrecorder.recordevents(saxeventrecorder.java:57)
at ch.qos.logback.core.joran.genericconfigurator.doconfigure(genericconfigurator.java:151)
at 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)
at org.springframework.boot.logging.logback.logbackloggingsystem.loadconfiguration(logbackloggingsystem.java:165)
... 22 more
caused by: org.xml.sax.saxnotsupportedexception: feature: http://xml.org/sax/features/external-general-entities
at org.apache.crimson.parser.xmlreaderimpl.setfeature(xmlreaderimpl.java:211)
at org.apache.crimson.jaxp.saxparserimpl.setfeatures(saxparserimpl.java:143)
at org.apache.crimson.jaxp.saxparserimpl.<init>(saxparserimpl.java:126)
at org.apache.crimson.jaxp.saxparserfactoryimpl.newsaxparserimpl(saxparserfactoryimpl.java:113)
at 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实现日志配置的详细内容。
