市面上虽然有很多日志处理机制,但是SLF4j+Logback其功能强大、使用简便的优势,受到越来越多的开发者青睐。
而且SpringBoot底层默认使用的是SLF4j+Logback日志
,它会自动依赖这两个包,不需要我们配置。
我们在此也介绍这种组合方式开发。
1、pom文件中导入对应的依赖包
tips:如果创建的是web项目,需要导入;如果创建的直接是springbootweb项目,就不需要导入了。
<!-- slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.26</version>
</dependency>
<!-- logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
如果是SpringBootweb项目的话不用导入上述依赖,SpringBoot的底层已经依赖好了,见下图:
2、logback.xml文件配置
logback.xml: 直接被日志框架识别。
<?xml version="1.0" encoding="UTF-8"?>
<!-- logback配置
1. 生产环境禁止输出日志到控制台
注释 <appender-ref ref="STDOUT" /> 即可
2. 配置包日志
配置logger标签即可,name字段为包全路径,lever可控制日志等级
3. 生产环境下不停机更新日志配置
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效
-->
<configuration scan="true" scanPeriod="60000">
<!-- Basic log dir, name config -->
<!-- 此处的这个路径配置自己创建的-->
<property name="baseDir" value="D:/logs/JavaDemo"/>
<property name="demoClassDir" value="demoClass"/>
<!-- DemoClass log -->
<appender name="DEMO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${baseDir}/${demoClassDir}.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<charset>UTF-8</charset>
<Pattern>%d{yyyy-MM-dd HH:mm:ss z} [%thread] %-5level %logger{5} %M:%L - %msg%n</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${baseDir}/${demoClassDir}/%d{yyyy-MM-dd}.log</FileNamePattern>
<!--只保留最近90天的日志-->
<!-- <maxHistory>90</maxHistory>-->
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!-- <totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
</appender>
<!-- 控制台输出 不需要修改 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<Pattern>%d{yyyy-MM-dd HH:mm:ss z} [%thread] %-5level %logger{5} %M:%L - %msg%n</Pattern>
</encoder>
</appender>
<logger name="com.spz.demo.java" level="INFO" additivity="true">
<appender-ref ref="DEMO" />
</logger>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
3、官方用例
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
4、日志的使用
1、默认配置
SpringBoot默认帮我们配置好了日志:
//记录器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
void contextLoads() {
//日志的级别: 由低到高 trace<debug<info<warn<error
//可以调整输出的日志级别:日志只会在这个级别及以后的高级别生效
logger.trace("这是tract日志.....");
logger.debug("这是debugger日志.....");
//springboot默认给我们的使用是info级别,没有指定级别的就用springboot默认级别
logger.info("这是info日志.....");
logger.warn("这是warn日志....");
logger.error("这是error日志....");
}
日志输出格式:
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%
%d 表示日期时间
%thread 表示线程名
%-5level 表示从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割
%msg 表示日志消息
%n 表示换行符
实例: 可以自己设置一些输出格式!
logging.level.com.dongxk = trace
#当前项目下生成springboot.Log日志
#logging.file.name = xxxx
# /表示当前磁盘的根路径
# /spring/log表示在当前磁盘根路径下创建spring文件夹和里面的log文件夹,使用spring.log作为默认文件
logging.file.path= /spring/log
# 在控制台输出的日志格式
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