基本概念
spring boot默认使用slf4j+logback
作为日志框架,下面也是基于这两个框架讲解的
那先来讲讲日志框架
之前在使用log4j
做日志框架的时候,一直不明白为什么还要引入slf4j
的jar包
原因就在于日志框架分为了日志抽象层(门面)和日志实现层 , 一个"门面"搭配一个实现层使用
而上面所述的slf4j
是日志抽象层,logback
是日志实现层
重点👇 :
1.配置文件只配实现层,即logback
的配置,抽象层不做配置
2.与上述相反 , 在调用API时,我们调用的则是抽象层slf4j
的API
提示:以下是本篇文章正文内容,下面案例可供参考
一、统一日志记录
说人话 , 就是在引入其它的框架时,必须将其日志框架转为与SpringBoot适配的slf4j
的框架
步骤如下 :
1.排除原有日志框架包
pom依赖如下(示例):
注:spring boot2.3.4的依赖里好像找不到排除原有jar包的依赖.是我的问题吗?
2.中间包替换
代码如下(示例):
就是使用一些xxx-over-slf4j.jar
的jar包将原有的日志框架转为slf4j的
可能是版本的问题吧 ,在依赖中没找到这个包…
这些中间包的底层使用的都是SLF4Factory()
工厂,因此在底层使用的都是SLF4J
日志
3.导入slf4j的其它实现
二、配置解析
1.日志优先级
代码如下(示例):
如下代码中,优先级递增排列 , spring boot默认是使用info级别的,高于给定级别的日志才能被输出
Logger logger = LoggerFactory.getLogger(getClass()); //创建记录器
@Test
void contextLoads() {
logger.trace("这是trace信息");
logger.debug("这是debug信息");
logger.info("这是Info信息");
logger.warn("这是warn信息");
logger.error("这是error信息");
}
2.调整日志级别
需要在日志配置文件中调整日志的配置级别
代码如下(示例):
logging.level.edu.cust.cs = trace
3.格式
和之前log4j在配置文件中修改格式差不多,只不过这里直接指定好了格式
控制台打印格式 : logging.pattern.console=
%d{yyyy‐MM‐dd} [%thread] %‐5level %logger{50} ‐ %msg%n
文件输出格式 : logging.pattern.file=
%d{yyyy‐MM‐dd} [%thread] %‐5level %logger{50} %msg%n
4.指定输出的位置
在配置文件中加入👇,指定日志输出位置
logging.file.path=E:\\LogDir4Spring-IDEA
三、自定义配置
直接贴配置吧
加入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<?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 scan="true" scanPeriod="10 seconds">
<contextName>logback</contextName>
<!--读取配置中心的属性-->
<!-- <springProperty scope="context" name="logpath" source="logging.path"/>-->
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<property name="LOG_PATH" value="/opt/apps/gateway/logs/"/>
<!--输出到控制台-->
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%i索引【从数字0开始递增】 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<encoder>
<!--%logger{50}:表示logger名字最长50个字符,否则按照句点分割-->
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50} -- %msg%n</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--输出到文件-->
<!-- 时间滚动输出 level为全部日志 -->
<appender name="RUNTIME" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名,注释掉这个按照每天生成一个日志文件 -->
<!--<file>E:\LogDir4Spring-IDEA/public.log</file>-->
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50} -- %msg%n</pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志归档 后面可以加.zip-->
<fileNamePattern>E:\LogDir4Spring-IDEApublic-%d{yyyy-MM-dd}.log</fileNamePattern>
<!--日志文件保留天数-->
<maxHistory>10</maxHistory>
<!--<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
<!--<!–文件达到 最大时会被压缩和切割 –>-->
<!--<maxFileSize>10MB</maxFileSize>-->
<!--</timeBasedFileNamingAndTriggeringPolicy>-->
<!-- 日志总保存量为200MB -->
<!--<totalSizeCap>200MB</totalSizeCap>-->
</rollingPolicy>
</appender>
<!--时间滚动输出 level为 ERROR 日志 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50} -- %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>E:\LogDir4Spring-IDEAerror-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>10</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">
<!--<logger name="com.phfund" level="debug"/>-->
<root level="DEBUG">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="RUNTIME"/>
<appender-ref ref="ERROR"/>
</root>
</springProfile>
<!--生产环境:输出到文件-->
<springProfile name="prd">
<root level="INFO">
<appender-ref ref="RUNTIME"/>
<appender-ref ref="ERROR"/>
</root>
</springProfile>
</configuration>
将上述配置放在resource目录下,命名为logback-spring.xml
并在application.properties
文件下引入
logging.config=classpath:logback-spring.xml
spring.profiles.active=prd
如果没看到有打印出来的日志,请指定工作环境