前言
SpringBoot对常用的技术都进行了一次简单的封装(封装成一个start启动包),使我们在开发项目的时候可以简单的上手。同样的SpringBoot对日志框架也进行了封装。
springBoot 封装的日志框架
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>xxx</version>
<scope>compile</scope>
</dependency>
在实际的开发web项目中我们并不需要引入这个pom,因为在spring-boot-starter-web
已经引入了
image.png
Springboot默认使用的是logback
日志框架
使用
引入spring-boot-starter-logging
包后,此时已经可以通过编码的形式获取
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestController {
private final static Logger logger= LoggerFactory.getLogger(TestController.class);
public Result<String> hello(Integer a){
logger.info("hello world");
}
}
再次引入lombok即可通过注解的形式使用,Slf4j是一个编译阶段的注解,编译之后就会消失,通过在编译生成java字节码时生效,帮助我们添加一些代码,不用我们自己手写,加快编程效率
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
@Slf4j
@RestController
@RequestMapping(value = "/test")
public class TestController {
public Result<String> hello(Integer a){
log.info("hello world");
}
}
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!--
根节点属性介绍:
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false
-->
<configuration scan="true" scanPeriod="60 seconds" debug="true">
<!-- 引入其他配置文件中的属性 -->
<property resource="log.properties" />
<!-- 引入sprig环境中的配置属性 -->
<springProperty scope="context" name="server.servlet.context-path" source="server.servlet.context-path" />
<springProperty scope="context" name="spring.application.name" source="spring.application.name" />
<!-- 应用名称,可以通过%contextName来使用,默认值为“default” -->
<contextName>my-web-service</contextName>
<!-- 设置一些变量,可以通过${}的形式使用:${log.dir} -->
<property name="pattern" value="%d{HH:mm:ss.SSS} [%thread] [%-5level] %logger{36} - %msg%n" />
<property name="file.pattern" value="%d [%thread] %-5level %logger{36} - %msg%n" />
<!--
日志如何输出,每一个appender封装一个输出方式
name:appender的名称
class:指定输出方式,不同的类对应不同的输出方式,通常使用的是输出到文件和输出到控制台
-->
<!-- 输出到控制台 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!--输出到文件-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高,
所以我们使用下面的策略,可以避免输出 Error 的日志-->
<!-- <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!-- <!–过滤 Error–>-->
<!-- <level>ERROR</level>-->
<!-- <!–匹配到就禁止–>-->
<!-- <onMatch>DENY</onMatch>-->
<!-- <!–没有匹配到就允许–>-->
<!-- <onMismatch>ACCEPT</onMismatch>-->
<!-- </filter>-->
<!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
的日志改名为今天的日期。即,<File> 的日志都是当天的。
-->
<File>${log.dir}${server.servlet.context-path}/${spring.application.name}/info.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${log.dir}${server.servlet.context-path}/${spring.application.name}/info.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--只保留最近30天的日志-->
<maxHistory>30</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<charset>UTF-8</charset>
<pattern>${file.pattern}</pattern>
</encoder>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>Error</level>
</filter>
<!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
的日志改名为今天的日期。即,<File> 的日志都是当天的。
-->
<File>${log.dir}${server.servlet.context-path}/${spring.application.name}/error.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${log.dir}${server.servlet.context-path}/${spring.application.name}/error.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--只保留最近30天的日志-->
<maxHistory>30</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<charset>UTF-8</charset>
<pattern>${file.pattern}</pattern>
</encoder>
</appender>
<!-- 规定采用那些输出方式,level:日志输出级别 -->
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
<appender-ref ref="file_error" />
</root>
</configuration>
参考文件:https://blog.csdn.net/qq_43842093/article/details/122802897