SpringBoot打日志

日志记录原则

  • 隔离性:日志输出不能影响系统正常运行;
  • 安全性:日志打印本身不能存在逻辑异常或漏洞,导致产生安全问题;
  • 数据安全:不允许输出机密、敏感信息,如用户联系方式、身份证号码、token等;
  • 可监控分析:日志可以提供给监控进行监控,分析系统进行分析;
  • 可定位排查:日志信息输出需有意义,需具有可读性,可供日常开发同学排查线上问题。

日志等级设置规范

在我们日常开发中有四种比较常见的日志打印等级,不同的等级适合在不同的时机下打印日志。

主要使用的有以下四个等级:

  • DEBUG
    DEUBG级别的主要输出调试性质的内容,该级别日志主要用于在开发、测试阶段输出。该级别的日志应尽可能地详尽,开发人员可以将各类详细信息记录到DEBUG里,起到调试的作用,包括参数信息,调试细节信息,返回值信息等等,便于在开发、测试阶段出现问题或者异常时,对其进行分析。

  • INFO
    INFO级别的主要记录系统关键信息,旨在保留系统正常工作期间关键运行指标,开发人员可以将初始化系统配置、业务状态变化信息,或者用户业务流程中的核心处理记录到INFO日志中,方便日常运维工作以及错误回溯时上下文场景复现。建议在项目完成后,在测试环境将日志级别调成INFO,然后通过INFO级别的信息看看是否能了解这个应用的运用情况,如果出现问题后是否这些日志能否提供有用的排查问题的信息。

  • WARN
    WARN级别的主要输出警告性质的内容,这些内容是可以预知且是有规划的,比如,某个方法入参为空或者该参数的值不满足运行该方法的条件时。在WARN级别的时应输出较为详尽的信息,以便于事后对日志进行分析。

  • ERROR
    ERROR级别主要针对于一些不可预知的信息,诸如:错误、异常等,比如,在catch块中抓获的网络通信、数据库连接等异常,若异常对系统的整个流程影响不大,可以使用WARN级别日志输出。在输出ERROR级别的日志时,尽量多地输出方法入参数、方法执行过程中产生的对象等数据,在带有错误、异常对象的数据时,需要将该对象一并输出。

实践

  1. 环境依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.1.4</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.wfx</groupId>
	<artifactId>boot3-logging</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>boot3-logging</name>
	<description>boot3-logging</description>
	<properties>
		<java.version>17</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

  1. 配置application.yml
    为了可以看出日志切片,这里设置为文件大小超过1KB就要生成新的文件,新的文件生成规则为logs文件加下,项目的名+日期+第几个+.log后缀
spring:
  application:
    name: boot3
logging:
  file:
    name: ./logs/boot3.log
  logback:
    rollingpolicy:
      max-file-size: 1KB
      file-name-pattern: ./logs/${spring.application.name}.%d{yyyy-MM-dd}.%i.log
  1. 启动测试
    当项目启动,在该项目下就会生成logs/boot3.log文件
    在这里插入图片描述
    这是boot3.log中的内容在这里插入图片描述
  2. 测试接口,生成多条文件日志
@Slf4j
@RestController
public class HelloController {
    @RequestMapping("hello")
    public String hello() {
        for (int i = 0; i < 10; i++) {
            log.info("===info===");
            log.error("===error===");
            log.warn("===warn===");
        }
        return "hello";
    }
}

发送该接口后,发现目录下多了一个文件
在这里插入图片描述
现在boot3.log的内容为
在这里插入图片描述
boot3.2024-01-29.0.log的内容为
在这里插入图片描述
由此看出,最新的日志先存在boot3.log中,当超过设置的大小后,生成新的文件,并把以前的内容放到新的文件中,boot3.log只存储最新的日志

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值