700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > spring boot 配置logback logback不打印日志

spring boot 配置logback logback不打印日志

时间:2024-02-29 02:22:57

相关推荐

spring boot 配置logback logback不打印日志

spring boot 日志简介

spring boot只依赖 Commons Logging API,而不依赖其他日志(jul、logback、log4j)。要想使用logback,必须引入jcl-over-slf4j( 实现了 Commons Logging API),将jcl转接到slf4j。所有的spring boot starter都依赖了spring-boot-starter-logging,pom如下

<dependencies><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-to-slf4j</artifactId></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jul-to-slf4j</artifactId></dependency></dependencies>

可以看到spring-boot-starter-logging引入了logback,同时将log4j、jul都转接到slf4j,这就是为什么引入jcl-over-slf4j就能使logback生效的原因。

如想修改日志级别,在application.properties中设置logging.level即可。

.springframework.web=.hibernate=ERROR

通过logging.file修改日志文件位置。

spring boot 配置logback

类路径下新建logback.xml或者logback-spring.xml,推荐使用后者,因为它能利用spring boot既有logback配置。xml与properties方式相比,能更细粒度的控制。

spring boot提供了logback的默认配置org/springframework/boot/logging/logback/base.xml

<included><include resource="org/springframework/boot/logging/logback/defaults.xml" /><property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/><include resource="org/springframework/boot/logging/logback/console-appender.xml" /><include resource="org/springframework/boot/logging/logback/file-appender.xml" /><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE" /></root></included>

它引入了defaults.xmlconsole-appender.xmlfile-appender.xml

defaults.xml配置了tomcat、hibernate的日志级别,规定了控制台及文件的输出格式。

<included><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /><conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /><conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /><property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/><logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/><logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/><logger name="org.mon.util.SecurityUtils" level="WARN"/><logger name="org.apache..NioSelectorPool" level="WARN"/><logger name="org.eclipse.ponent.AbstractLifeCycle" level="ERROR"/><logger name="org.hibernate.validator.internal.util.Version" level="WARN"/></included>

console-appender.xml使用了defaults.xml规定的控制台输出格式。

<included><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern></encoder></appender></included>

file-appender.xml使用了defaults.xml规定的文件输出格式,并会按照大小和时间分片,文件最大10M。

<included><appender name="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern>${FILE_LOG_PATTERN}</pattern></encoder><file>${LOG_FILE}</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern><maxFileSize>${LOG_FILE_MAX_SIZE:-10MB}</maxFileSize><maxHistory>${LOG_FILE_MAX_HISTORY:-0}</maxHistory></rollingPolicy></appender></included>

配置logback只输出到文件

新建logback-spring.xml引入file-appender.xml,没有引入console-appender.xml,所以不会输出到控制台。

<?xml version="1.0" encoding="UTF-8"?><configuration><include resource="org/springframework/boot/logging/logback/defaults.xml" /><property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/><include resource="org/springframework/boot/logging/logback/file-appender.xml" /><root level="INFO"><appender-ref ref="FILE" /></root></configuration>

总结

spring boot使用logback

引入jcl-over-slf4j如果只改变日志级别,在application.properties中配置logging.level即可细粒度的控制,新建logback-spring.xml,酌情引入defaults.xmlconsole-appender.xmlfile-appender.xml

logback不起作用,使用了其他日志

在实践中,往往遇到logback不起作用的情况,通过mvn dependency:tree查看依赖,一般来说都是因为引入了其它日志实现(log4j、apache commons log)导致,控制台一般会有提示,这种情况,排除掉其他日志实现 即可。比如

<dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion><exclusion><artifactId>log4j</artifactId><groupId>log4j</groupId></exclusion></exclusions></dependency>

参考

spring boot howto-logging

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。