6、springboot:日志的介绍、使用、切换
一、主流的日志框架介绍

二、springboot中SLF4J的使用
如何在系统中使用SLF4j https://www.slf4j.org
如下图:

每一个日志的实现框架都有自己的配置文件。
使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件
三、springboot如何使其它日志框架转为slf4j进行输出
springboot使用(slf4j+logback)、 Spring使用(commons-logging)、Hibernate使用(jboss-logging)、MyBatis、xxxx
springboot进行统一日志记录,即使是别的框架和我一起统一使用slf4j进行输出

四、springboot日志关系
依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
SpringBoot使用它来做日志功能:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency>

SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,
引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可;
五、springboot中日志的相关配置
1、springboot中的默认日志相关配置
@RunWith(SpringRunner.class) @SpringBootTest public class SpringbootLogTest {
//记录器 Logger logger = LoggerFactory.getLogger(getClass()); @Test public void logTest() { logger.trace("这是trace日志"); logger.debug("这是debug日志"); logger.info("这是info日志"); //springboot 默认设置的 info级别 logger.warn("这是warn日志"); logger.error("这是error日志"); } }
日志的级别由低到高
trace<debug<info<warn<error
运行springboot应用的时候查看控制台可以发现;springboot日志输出级别默认是info级别(只输出>=info的级别的的日志信息)
可以调整输出的日志级别,只输出>=日志级别的日志信息
另外默认把日志信息是输出到控制台

2.application.xml中配置日志级别
logging.level.com.mr=debug //指定扫描的包(红色备注)以及日志级别

3.配置日志输出文件(不配置时默认只输出到控制台)
方式一:
#没有指定具体路径的时候日志文件就生成在当前项目下 logging.file.name=springboot.log #指定了具体路径的时候日志文件就生成在指定路径下 #logging.file.name=e:/springboot.log

方式二:
#在当前项目的磁盘(我的项目现在在D盘)的根路径创建spring文件和和里面的log文件,使用spring.Log作为默认文件
logging.file.path=/spring/log

当配置了logging.file.name时logging.file.path就会失效

4.自定义日志信息输出格式
#在控制台输出的日志格式 logging.pattern.console =
#指定在文件中日志输出的格式
logging.pattern.file =
日志输出格式:
%d表示日期时间,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
-->
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
举例:
![]()
输出结果:

配置代码小结:
#设置日志级别 logging.level.com.atguigu=trace #配置日志文件: # 方式一: #没有指定具体路径的时候日志文件就生成在当前项目下 #logging.file.name=springboot.log #指定了具体路径的时候日志文件就生成在指定路径下 #logging.file.name=e:/springboot.log # 方式二: #在当前项目的磁盘的根目录下创建spring文件夹,再在里面创建log文件夹;最后使用spring.log作为默认日志文件名 logging.file.path=/spring/log #当配置了logging.file.name时logging.file.path就会失效 #配置控制台日志输出格式 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
六、自定义日志配置文件(不使用springboot的默认日志配置)

以自定义logback日志的配置为例:(在类路径下放名为logback.xml的文件):

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="/app/log" />
<!-- 定义日志的文件名 -->
<property name="appName" value="loog"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>


<springProfile name="xxx"> <!--可以指定某段配置只在某个环境下生效-->
</springProfile>
此时修改logback.xml名为logback-spring.xml

<springProfile name="xxx">指定某段配置根据环境不同而配置的内容不同
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="/app/log" />
<!-- 定义日志的文件名 -->
<property name="appName" value="loog"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<springProfile name="dev">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} +++ [%thread] %-5level %logger{50} - %msg%n</pattern>
</springProfile>
<springProfile name="!dev">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} --- [%thread] %-5level %logger{50} - %msg%n</pattern>
</springProfile>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
指定环境:

如果使用名字为logback.xml作为日志配置文件,还要使用profile功能,会报错
推荐使用spring-logbac.xml 是由Spring Boot识别,可以使用新功能
七、切换日志框架
可以按照slf4j的日志适配图,进行相关的切换;
1、切换为log4j的配置(记得写相关配置文件)
①假如现在想用 log4j ,需要排除 springboot 默认依赖的 logback 依赖;
②log4j-over-slf4j.jar 是 log4j 转成 slf4j 要用的,而我们现在就是想用 log4j,不想转为slf4j,所以不需要这个转换包,即排除这个依赖,
③slf4j-log4j12.jar 是 log4j 要用的中间包,需导入。
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId>
<exclusions> <exclusion> <artifactId>logback-classic</artifactId> <groupId>ch.qos.logback</groupId> </exclusion> <exclusion> <artifactId>log4j-over-slf4j</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions>
</dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency>
2、切换为log4j2日志框架(记得写相关配置文件)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>


浙公网安备 33010602011771号