说明
- 默认情况下,springboot项目使用logback来记录日志,并输出到控制台。实际开发中我们不需要直接添加logback日志依赖。 你会发现spring-boot-starter 其中包含了spring-boot-starter-logging,该依赖内容就是 springboot 默认的日志框架logback。
- 完整代码地址在结尾!!
第一步,自定义logback-custom.xml配置文件,并且放在 src/main/resources下
提示:根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载,本文直接自定义名字了,需要在application.yml文件中指定一下,后面会说到:
- Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
- Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
- Log4j2:log4j2-spring.xml, log4j2.xml
- JDK (Java Util Logging):logging.properties
springboot官方推荐优先使用带有 -spring 的文件名作为你的日志配置(如比使用 logback-spring.xml ,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项。
logback-custom.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 此xml在spring-boot-1.5.3.RELEASE.jar里 -->
<!-- <include resource="org/springframework/boot/logging/logback/defaults.xml" />-->
<!-- <include resource="org/springframework/boot/logging/logback/console-appender.xml" />-->
<!-- 开启后可以通过jmx动态控制日志级别(springboot Admin的功能) -->
<!--<jmxConfigurator/>-->
<contextName>logback-custom</contextName>
<!-- 定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
<springProperty scope="context" name="LOG_HOME" source="log.file"/>
<!-- 输出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- error日志 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<prudent>true</prudent>
<append>true</append>
<encoder>
<pattern>%date [%level] [%thread] %logger{60} [%file : %line] %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 添加.gz 历史日志会启用压缩 大大缩小日志文件所占空间 -->
<!--<fileNamePattern>/home/hfw-client/hfw_log/stdout.log.%d{yyyy-MM-dd}.log</fileNamePattern>-->
<fileNamePattern>${LOG_HOME}/error/error-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory><!-- 保留7天日志 -->
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- file日志 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<prudent>true</prudent>
<append>true</append>
<encoder>
<pattern>%date [%level] [%thread] %logger{60} [%file : %line] %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 添加.gz 历史日志会启用压缩 大大缩小日志文件所占空间 -->
<!--<fileNamePattern>/home/hfw-client/hfw_log/stdout.log.%d{yyyy-MM-dd}.log</fileNamePattern>-->
<fileNamePattern>${LOG_HOME}/file/file-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory><!-- 保留7天日志 -->
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<logger name= "fileLog" level="INFO" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="ERROR"/>
</logger>
<!-- <!– 设置包打印日志级别,例如把所有mapper文件的sql都出到控制台,还可以精确到某个类 –>-->
<!-- <logger name= "com.luoyu.mapper.applymapper" level="TRACE" />-->
<!-- <logger name= "com.luoyu.mapper.shiromapper" level="TRACE" />-->
<root level="info">
<appender-ref ref="ERROR"/>
<appender-ref ref="STDOUT"/>
</root>
</configuration>
解释:
- <logger name= "com.luoyu.mapper.applymapper" level="TRACE" /> 此处name是扫描需要打印sql语句的mapper包,可配置多个,而level则是打印日志的级别,还可以精确到某个类。
- 级别分为:TRACE < DEBUG < INFO < WARN < ERROR < FATAL
- 只能展示大于或等于设置的日志级别的日志;也就是说springboot默认级别为INFO,那么在控制台展示的日志级别只有INFO 、WARN、ERROR、FATAL
- <springProperty scope="context" name="LOG_HOME" source="log.file"/>此处的log.file代表输入到日志文件的路径,需要在application.yml中配置,后面会说到
第二步,打开application.yml文件,新增以下配置
# 指定自定义命名的配置文件
logging:
config: classpath:logback-custom.xml
# 打印日志统一根路径
log:
file: D:/log
此时启动项目便可自动打印出mybatis的sql语句到控制台,需要指定mapper的包路径,也可以输出日志到文件中。后面还需要测试lombok的输出,单元测试最后给出。
第三步,代码里打印日志,在pom.xml文件中添加依赖,如下
<!-- 打印日志 @Slf4j 注解依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
</dependency>
第四步,IDEA添加lombok插件,选择file—>setting—>plugins,搜索lombok插件进行安装,不懂请自行百度
第五步,编写单元测试类,LogbackApplicationTests,并进行测试
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@Slf4j
// 获取启动类,加载配置,确定装载 Spring 程序的装载方法,它回去寻找 主配置启动类(被 @SpringBootApplication 注解的)
@SpringBootTest
class LogbackApplicationTests {
private Logger fileLog = LoggerFactory.getLogger("fileLog");
@Test
void consoleLogTest() {
log.info("测试输出到控制台");
}
@Test
void fileLogTest() {
fileLog.info("测试输出到日志文件");
}
@BeforeEach
void testBefore(){
log.info("测试开始!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
}
@AfterEach
void testAfter(){
log.info("测试结束!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
}
}
- @Slf4j注解跟log.info配合使用,属于lombok工具方式输出,直接输出到控制台,调试的时候特别方便。另外一种fileLog.info会特定输出到指定的日志文件
- log.后面的方法名代表打印级别,包括log.trace(),log.debug(),log.info(),log.warn(),log.error()等方法