springboot logback-spring.xml无法加载
现象
springboot项目,启动后,日志文件没有出现在logback-spring.xml指定的目录下
且启动日志开头如下:
"c:\program files\java\jdk1.8.0_144\bin\java"...
connected to the target vm, address: '127.0.0.1:52494', transport: 'socket'
18:34:58,011 |-info in ch.qos.logback.classic.loggercontext[default] - could not find resource [logback-test.xml]
18:34:58,011 |-info in ch.qos.logback.classic.loggercontext[default] - could not find resource [logback.groovy]
18:34:58,011 |-info in ch.qos.logback.classic.loggercontext[default] - found resource [logback.xml] at [jar:file:/d:/mvn_repo/xxx-1.0.2.jar!/logback.xml]
18:34:58,014 |-info in ch.qos.logback.core.joran.spi.configurationwatchlist@707194ba - url [jar:file:/d:/mvn_repo/yyy-1.0.2.jar!/logback.xml] is not of type file
18:34:58,112 |-info in ch.qos.logback.classic.joran.action.configurationaction - will scan for changes in [jar:file:/d:/mvn_repo/zzz-1.0.2.jar!/logback.xml]
logback-spring.xml文件一直未改动过,如下:
<?xml version="1.0" encoding="utf-8"?> <configuration status="info"> <springproperty scope="context" name="logpath" source="log.path"/> <springproperty scope="context" name="loglevel" source="log.level"/> <appender name="consolelog" class="ch.qos.logback.core.consoleappender"> <layout class="ch.qos.logback.classic.patternlayout"> <pattern> %d{yyyy-mm-dd hh:mm:ss.sss} %-5level [%thread] %logger{36} %line - %msg%n</pattern> </layout> </appender> <appender name="filelog" class="ch.qos.logback.core.rolling.rollingfileappender"> <!--滚动策略--> <rollingpolicy class="ch.qos.logback.core.rolling.timebasedrollingpolicy"> <!--输出路径--> <filenamepattern>${logpath}/server.%d.log</filenamepattern> </rollingpolicy> <encoder> <pattern> %d{yyyy-mm-dd hh:mm:ss.sss} %-5level [%thread] %logger{36} %line - %msg%n</pattern> <charset>utf-8</charset> </encoder> </appender> <appender name="fileerrorlog" class="ch.qos.logback.core.rolling.rollingfileappender"> <filter class="ch.qos.logback.classic.filter.levelfilter"> <level>error</level> <onmatch>accept</onmatch> <onmismatch>deny</onmismatch> </filter> <!--滚动策略--> <rollingpolicy class="ch.qos.logback.core.rolling.timebasedrollingpolicy"> <!--输出路径--> <filenamepattern>${logpath}/server.%d.error</filenamepattern> </rollingpolicy> <encoder> <pattern> %d{yyyy-mm-dd hh:mm:ss.sss} %-5level [%thread] %logger{36} %line - %msg%n</pattern> <charset>utf-8</charset> </encoder> </appender> <root level="${loglevel}"> <appender-ref ref="consolelog"/> <appender-ref ref="filelog"/> <appender-ref ref="fileerrorlog"/> </root> </configuration>
原因分析
1.配置文件位置正确
classes/ ├── application.properties ├── com │ └── nero │ └── test │ ├── api │ │ ├── api.class
2.分析启动日志,分析可能是依赖的jar中有logback.xml配置,冲突导致的问题
解决方案
在application.properties中加入配置:
logging.config=classpath:logback-spring.xml
通过该配置,强制指定日志的配置文件,问题得以解决
springboot logback-spring.xml 配置, 使用不同配置文件中的配置
application.yml
spring: profiles: active: prod # active 哪一个配置文件
application-dev.yml
logging: file: path: d:/var/log
application-prod.yml
logging: file: path: /var/log/question
logback-spring.xml
<?xml version="1.0" encoding="utf-8"?> <configuration scan="true" scanperiod="60 seconds" debug="false"> <contextname>wechat-service</contextname> <!-- !!!!!!!!!获取 application-{xxx}.yml 的配置 !!!!!--> <springproperty scope="context" name="log.path" source="logging.file.path"/> <!--<property name="log.path" value="log" />--> <property name="log.maxhistory" value="15" /> <property name="log.colorpattern" value="%d{yyyy-mm-dd hh:mm:ss} | %highlight(%-5level) | %boldyellow(%thread) | %boldgreen(%logger) | %msg%n"/> <property name="log.pattern" value="%d{yyyy-mm-dd hh:mm:ss.sss} %contextname [%thread] %-5level %logger{36} - %msg%n" /> <!--输出到控制台--> <appender name="console" class="ch.qos.logback.core.consoleappender"> <encoder> <pattern>${log.colorpattern}</pattern> </encoder> </appender> <!--输出到文件 info 级别的 log--> <appender name="file_info" class="ch.qos.logback.core.rolling.rollingfileappender"> <rollingpolicy class="ch.qos.logback.core.rolling.timebasedrollingpolicy"> <filenamepattern>${log.path}/info/info.%d{yyyy-mm-dd}.log</filenamepattern> <maxhistory>${log.maxhistory}</maxhistory> </rollingpolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.levelfilter"> <level>info</level> <onmatch>accept</onmatch> <onmismatch>deny</onmismatch> </filter> </appender> <!--输出到文件 error 级别的 log--> <appender name="file_error" class="ch.qos.logback.core.rolling.rollingfileappender"> <rollingpolicy class="ch.qos.logback.core.rolling.timebasedrollingpolicy"> <filenamepattern>${log.path}/error/error.%d{yyyy-mm-dd}.log</filenamepattern> </rollingpolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.levelfilter"> <level>error</level> <onmatch>accept</onmatch> <onmismatch>deny</onmismatch> </filter> </appender> <root level="debug"> <appender-ref ref="console" /> </root> <root level="info"> <appender-ref ref="file_info" /> <appender-ref ref="file_error" /> </root> </configuration>
从application-xxx.yml 中拿配置
<springproperty scope="context" name="log.path" source="logging.file.path"/>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论