Spring Boot 的Logback
Posted baby123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot 的Logback相关的知识,希望对你有一定的参考价值。
Spring Boot 默认使用Logback记录日志
Spring Boot starter 都会默认引入spring-boot-starter-logging,不需要再引入
日志级别从高到低:TRACE
< DEBUG
< INFO
< WARN
< ERROR
< FATAL
如果设置为 WARN
,则低于 WARN
的信息都不会输出。
Spring Boot
中默认配置ERROR
、WARN
和INFO
级别的日志输出到控制台。
2019-08-20 10:42:03.680 INFO 13728 --- [ main] com.example.demo.DemoApplication : Starting DemoApplication on hkgi-PC with PID 13728 (E:\\java\\demo\\target\\classes started by Administrator in E:\\java\\demo)
2019-08-20 10:42:03.683 INFO 13728 --- [ main] com.example.demo.DemoApplication : No active profile set, falling back to default profiles: default
2019-08-20 10:42:04.279 INFO 13728 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-08-20 10:42:04.336 INFO 13728 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 51ms. Found 1 repository interfaces.
2019-08-20 10:42:04.617 INFO 13728 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean ‘org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration‘ of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$58c4426d] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-08-20 10:42:04.899 INFO 13728 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
A.日期和时间--精确到毫秒,并按照时间进行简单的排序
B.日志级别--ERROR,WARN,INFO,DEBUG,TRACE
C.进程ID号
D.日志内容,用"---"分隔符分开
E.线程名字——括在方括号中
F.日志的名字--通常对应的是类名
说明:
Logback没有FATAL级别,映射到ERROR
配置
(1)在application.properties中添加对应的配置
指定包下日志输出的等级,root表示默认的级别
logging.level.root= WARN logging.level.org.springframework.web= INFO logging.level.org.hibernate = ERROR logging.level.org.apache = INFO
输出样式
logging.level.root= WARN logging.level.org.springframework.web= INFO logging.level.org.hibernate = ERROR logging.level.org.apache = INFO logging.pattern.console= %dyyyy-MMM-dd HH:mm:ss.SSS %-5level [%thread] %logger15 - %msg%n
设置文本的颜色
logging.level.root= WARN
logging.level.org.springframework.web= INFO
logging.level.org.hibernate = ERROR
logging.level.org.apache = INFO
#检测终端是否支持ANSI,是的话就采用彩色输出
spring.output.ansi.enabled=detect
logging.pattern.console= %clr(%dyyyy-MMM-dd HH:mm:ss.SSS %-5level [%thread] %logger15 - %msg%n)blue
输出到文件
logging.level.root= WARN logging.level.org.springframework.web= INFO logging.level.org.hibernate = ERROR logging.level.org.apache = INFO logging.pattern.console= %dyyyy-MMM-dd HH:mm:ss.SSS %-5level [%thread] %logger15 - %msg%n logging.path = logs logging.pattern.file= %dyyyy-MMM-dd HH:mm:ss.SSS %-5level [%thread] %logger15 - %msg%n ## 当文件超过1G时,归档压缩 logging.file.max-size=1GB ## 日志文件最多保存3天 logging.file.max-history=3
(2)使用XML配置Logback
还是有很多高级特性不太好配置,因此SpringBoot还是支持通过加载logback-spring.xml
配置文件来定义日志相关的参数
在src/main/resources下创建logback-spring.xml文件
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <property name="log.path" value="logs" /> <!--0. 日志格式和颜色渲染 --> <!-- 彩色日志依赖的渲染类 --> <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(%dyyyy-MM-dd HH:mm:ss.SSS)faint %clr($LOG_LEVEL_PATTERN:-%5p) %clr($PID:- )magenta %clr(---)faint %clr([%15.15t])faint %clr(%-40.40logger39)cyan %clr(:)faint %m%n$LOG_EXCEPTION_CONVERSION_WORD:-%wEx"/> <!--1. 输出到控制台--> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>info</level> </filter> <encoder> <Pattern>$CONSOLE_LOG_PATTERN</Pattern> <!-- 设置字符集 --> <charset>UTF-8</charset> </encoder> </appender> <!--2. 输出到文档--> <!-- 2.1 level为 DEBUG 日志,时间滚动输出 --> <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文档的路径及文档名 --> <file>$log.path/debug.log</file> <!--日志文档输出格式--> <encoder> <pattern>%dyyyy-MM-dd HH:mm:ss.SSS [%thread] %-5level %logger50 - %msg%n</pattern> <charset>UTF-8</charset> <!-- 设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志归档 --> <fileNamePattern>$log.path/debug-%dyyyy-MM-dd.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文档保留天数--> <maxHistory>15</maxHistory> </rollingPolicy> <!-- 此日志文档只记录debug级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>debug</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 2.2 level为 INFO 日志,时间滚动输出 --> <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文档的路径及文档名 --> <file>$log.path/info.log</file> <!--日志文档输出格式--> <encoder> <pattern>%dyyyy-MM-dd HH:mm:ss.SSS [%thread] %-5level %logger50 - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 每天日志归档路径以及格式 --> <fileNamePattern>$log.path/info-%dyyyy-MM-dd.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文档保留天数--> <maxHistory>15</maxHistory> </rollingPolicy> <!-- 此日志文档只记录info级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>info</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 2.3 level为 WARN 日志,时间滚动输出 --> <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文档的路径及文档名 --> <file>$log.path/warn.log</file> <!--日志文档输出格式--> <encoder> <pattern>%dyyyy-MM-dd HH:mm:ss.SSS [%thread] %-5level %logger50 - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>$log.path/warn-%dyyyy-MM-dd.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文档保留天数--> <maxHistory>15</maxHistory> </rollingPolicy> <!-- 此日志文档只记录warn级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>warn</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 2.4 level为 ERROR 日志,时间滚动输出 --> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文档的路径及文档名 --> <file>$log.path/error.log</file> <!--日志文档输出格式--> <encoder> <pattern>%dyyyy-MM-dd HH:mm:ss.SSS [%thread] %-5level %logger50 - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>$log.path/error-%dyyyy-MM-dd.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文档保留天数--> <maxHistory>15</maxHistory> </rollingPolicy> <!-- 此日志文档只记录ERROR级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <springProfile name="dev"> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="DEBUG_FILE" /> <appender-ref ref="INFO_FILE" /> <appender-ref ref="WARN_FILE" /> <appender-ref ref="ERROR_FILE" /> </root> </springProfile> <springProfile name="prod"> <root level="info"> <appender-ref ref="DEBUG_FILE" /> <appender-ref ref="INFO_FILE" /> <appender-ref ref="WARN_FILE" /> <appender-ref ref="ERROR_FILE" /> </root> </springProfile> </configuration>
说明:
使用springProfile 分别配置了开发(dev),生产(prod)环境
springProfile 如何指定?
application.properties中添加配置项
spring.profiles.active: dev
表示默认加载的就是开发环境的配置
创建不同环境下的配置文件(可以为不同的环境配置不同的数据库信息)
开发环境 : application-dev.properties
生产环境:application-prod.properties
spring.profiles.active
配置项加载相关环境的配置信息--spring.profiles.active=xxx
来控制加载哪个环境的配置java -jar test.jar --spring.profiles.active=dev
以上是关于Spring Boot 的Logback的主要内容,如果未能解决你的问题,请参考以下文章
《02.Spring Boot连载:Spring Boot实战.Spring Boot核心原理剖析》
spring-boot整合dubbo:Spring-boot-dubbo-starter