前言
本篇博客主要介绍了如何在SpringBoot框架下打印输出日志,包括控制台的日志输出,将日志输出到文件,打印输出sql语句等功能。
一、添加依赖文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
但是呢,实际开发中是不需要直接添加该依赖的,你会发现spring-boot-starter其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。综上所述,只有你的依赖里面导入了spring-boot-starter相关依赖,就不需要导入上面的依赖了,比如说下面展示的web项目依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
二、文件配置
1.在application.yml中指定日志文件名
logging:
config: classpath:logging-config.xml
2.在resources文件夹下面创建日志文件logging-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--contextName标签可以用来设置logger文件名称,默认名称为“default”,可以通过%contextName来打印名称-->
<contextName>logback</contextName>
<!--property标签的作用是用来定义变量,name是变量名,value是变量值,使用${}的格式可以在日志文件内使用变量。-->
<property name="log.path" value="/Users/log" />
<!--appender标签用来格式化日志输出节点,有两个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。-->
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--ThresholdFilter是系统定义的拦截器,用来过滤掉error级别以下的日志信息,不使用请注释掉,不然控制台会少一些日志。 -->
<!--<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>-->
<!--encoder标签:对日志进行编码。-->
<encoder>
<!-- %d{HH:mm:ss.SSS}:当前系统时间;
%contextName:logger文件名称;
[%thread]:输出日志的进程名字,这在Web应用以及异步任务处理中很有用;
%-5level:日志级别;
%logger{36}:日志输出者的名字;
%msg:日志具体内容信息;
%n:平台换行符; -->
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %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.path}/logback.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。
默认是DEBUG。
可以包含零个或多个元素,标识这个appender将会添加到这个logger。 -->
<!-- 将level值设为debug时会打印出sql语句和很多多余信息 -->
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<!-- 下面两种logger配置根据应用场景任选其一进行应用 -->
<!-- 1.全局logger设置,所有的日志输出共用一个logger配置。 -->
<logger name="com.lx.demo.controller" level="DEBUG"/>
<!-- 2.在有多个controller控制层需要使用不同的日志输出级别时,可以定义多个logger来控制不同的控制层输出日志。 -->
<!--将additivity属性值改成”true”的话,就会打印两次,因为打印信息向上级传递,logger本身打印一次,root接到后又打印一次。-->
<!--<logger name="com.lx.demo.controller.HelloController" level="warn" additivity="false">
<appender-ref ref="console"/>
</logger>
<logger name="com.lx.demo.controller.UserController" level="error" additivity="false">
<appender-ref ref="console"/>
</logger>-->
<!-- 下面的logger配置方式可以扫描mapper文件夹下的所有文件,打印出sql语句。 -->
<!-- 这里的level值一般设为dubug不会变化,只影响sql语句的打印输出,不影响日志文件的输出级别。 -->
<logger name="com.lx.demo.mapper" level="debug" additivity="false">
<appender-ref ref="console"/>
</logger>
</configuration>
3.日志的使用测试
@RestController
public class HelloController {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@RequestMapping("/hello")
public String hello(){
//日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。
logger.trace("日志输出 trace");
logger.debug("日志输出 debug");
logger.info("日志输出 info");
logger.warn("日志输出 warn");
logger.error("日志输出 error");
return "HelloWrold!";
}
}
控制台输出:
备注:这里trace级别日志没打印出来是因为在日志文件中设置了输出级别值为DUBUG。