Springboot日志框架Logback的使用及配置
共 20251字,需浏览 41分钟
·
2021-03-14 18:20
点击上方蓝色字体,选择“标星公众号”
优质文章,第一时间送达
两种配置方式
application.properties或 application.yml (系统层面)
logback-spring.xml(自定义文件方式)
第一种方式比较简单,可做的事情也比较简单,比如:只能配置日志文件的输出路径、日志文件的格式、日志的级别等
第二种方式比较复杂,对日志的处理比较好,生产上推荐这种,运行维护好。如有以下需求:
1、区分 debug、info、error 等类型的日志,并分别输出到不同的日志文件。
2、对日志文件进行维护,如每天产生一个日志文件,并设置日志文件的大小和保留天数等。
方式一:application.properties或 application.yml
#日志级别 trace<debug<info<warn<error<fatal,默认级别为info,即默认打印info及其以上级别的日志
#logging.level设置日志级别,后面跟生效的区域,比如root表示整个项目,也可以设置为某个包下,也可以具体到某个类名(日志级别的值不区分大小写)
#logging.level.root=info就是默认的情况
logging:
pattern: #配置日志输出格式
# console: "%d{yyyy-MM-dd HH:mm:ss.SSS} %clr(%-5level){green} %clr(${PID:- }){magenta} [ %clr(%thread){red}] --- %clr(%logger{36}){blue} : %msg%n" #配置控制台的日志输出的格式,默认输出格式
file: "%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} === - %msg%n" #配置控制台的日志输出的格式
# 日志输出格式:
# %d表示日期时间,
# %thread表示线程名,
# %-5level:级别从左显示5个字符宽度
# %logger{50} 表示logger名字最长50个字符,否则按照句点分割。
# %msg:日志消息,
# %n是换行符
# %clr(对项){颜色名} 配置该项的颜色 #只在控制台有作用
# ${PID:- } 进程号
# %d{yyyy-MM-dd HH:mm:ss.SSS} %clr(%-5level){green} %clr(${PID:- }){magenta} [ %clr(%thread){red}] --- %clr(%logger{36}){blue} : %msg%n #系统默认配置
file: #配置日志输出的文件
#这两个选一个配置就可以了,一起配置的话,name的生效。系统每次启动都会在原来的日志文件上追加数据
# name: F:/ideaWorkSpace/spring-boot.log
path: F:/ideaWorkSpace/log/ #会在log目录下生成一个spring.log的日志文件,相对路径为项目目录下
level: # 配置输出日志级别
root: INFO #设置整个项目的日志输出级别默认info
com.bs.agricultural_share_platform.dao: DEBUG # 设置该包下的日志输出级别为 DEBUG,输出执行的sql
该方式,日志都写在一个文件里面,不方便维护。
方式二:logback-spring.xml文件配置
在resources目录下添加logback-spring.xml配置文件
配置文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration debug="true">
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<!-- 定义属性 -->
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<property name="log.path" value="F:/ideaWorkSpace/log" />
<!-- 彩色日志格式 -->
<!-- 控制台日志输出-->
<property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wex"/>
<!-- <property name="CONSOLE_LOG_PATTERN" value="[%date{yyyy-MM-dd HH:mm:ss.SSS}][%-4level][%line][%thread] reqLog:[%X{reqLog}] call:[%logger][%method] parameter:%msg%n"/>-->
<!-- 日志文件日志输出-->
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } --- [%t] %-40.40logger{39} : %m%n%wex"/>
<!--多环境的日志输出-->
<!--根据不同环境(prd:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,-->
<!--在 logback-spring.xml中使用 springProfile 节点来定义,方法如下:-->
<springProfile name="prd">
<property name="LOG_HOME" value="F:/ideaWorkSpace/log" />
</springProfile>
<springProfile name="test">
<property name="LOG_HOME" value="F:/ideaWorkSpace/log" />
</springProfile>
<springProfile name="dev">
<property name="LOG_HOME" value="F:/ideaWorkSpace/log" />
<!-- <logger name="com.bs.agricultural_share_platform.dao" level="debug"/>-->
</springProfile>
<!--
<logger>用来设置某一个包或者具体的某一个类的日志打印级别、
以及指定<appender>。<logger>仅有一个name属性,
一个可选的level和一个可选的addtivity属性。
name:用来指定受此logger约束的某一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
如果未设置此属性,那么当前logger将会继承上级的级别。
addtivity:是否向上级logger传递打印信息。默认是true。
-->
<!--
使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
-->
<!--
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
不能设置为INHERITED或者同义词NULL。默认是DEBUG
可以包含零个或多个元素,标识这个appender将会添加到这个logger。
-->
<!--输出到控制台-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 设置debug,在控制台输出执行的sql-->
<level>debug</level>
</filter>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!--debug 级别的日志-->
<!-- 按照每天生成日志文件 -->
<appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名,正在的 -->
<file>${log.path}/log_debug.log</file>
<!-- 设置此日志文件只记录debug级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!--日志文件输出格式-->
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<fileNamePattern>${LOG_HOME}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--info 级别的日志-->
<!-- 按照每天生成日志文件 -->
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名,正在的 -->
<file>${log.path}/log_info.log</file>
<!-- 设置此日志文件只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!--日志文件输出格式-->
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<fileNamePattern>${LOG_HOME}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--WARN 级别的日志-->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名,正在的 -->
<file>${log.path}/log_warn.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/warn.%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<!--ERROR 级别的日志-->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名,正在的 -->
<file>${log.path}/log_error.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<!-- 系统日志输出级别 ,ref 的名字对应上面appender标签的name名称-->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="INFO"/>
<appender-ref ref="WARN"/>
<appender-ref ref="ERROR"/>
<appender-ref ref="DEBUG"/>
</root>
</configuration>
Springboot会在目录下自动生成对应类型的日志文件:
其它问题
1、有些人配置文件里面有看到 layout(如下例子),不要慌,因为encoder 和 layout 在作用上没有本质区别,但是自0.9.19版本之后,极力推荐使用encoder。
2、为什么Spring Boot推荐使用logback-spring.xml来替代logback.xml来配置logback日志的问题分析?
原因是:logback.xml加载早于application.properties,所以如果你在logback.xml使用了变量时,而恰好这个变量是写在application.properties时,那么就会获取不到,只要改成logback-spring.xml就可以解决。
拓展:使用Slf4j输出日志
1、添加依赖
<!-- Slf4j日志-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
2、Idea添加lombok插件
3、添加注解并使用
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@MapperScan(basePackages = "com.bs.agricultural_share_platform.dao")
@Slf4j
public class AgriculturalSharePlatformApplication {
public static void main(String[] args) {
log.info("启动项目了");
SpringApplication.run(AgriculturalSharePlatformApplication.class, args);
}
}
————————————————
版权声明:本文为CSDN博主「浅议永久」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/weixin_41844824/article/details/114463474
粉丝福利:Java从入门到入土学习路线图
👇👇👇
👆长按上方微信二维码 2 秒
感谢点赞支持下哈