文章目录
日志输出-第二章-接口级出入参的实现
上一章的内容为:日志输出指南
一、概述
上一章已经对日志输出的大概注意事项做了阐述,本章将介绍对应的一些统一出入参的内容
ps:仅代表个人经验嗷
一般我在使用的时候,会接入到 SkyWalking 或者是 ELK,但是不接入使用也不是不行,只是需要上服务器去抓日志文件,没那么方便。
1.1、单机时代
这个时候的出入参记录一般是分为两种粒度
- 接口级的出入参记录
- 方法级的出入参记录
根据不同的情况来选择不同的记录方式,以方便排查问题。
接口级:
一般是必备的,知道了请求的入参,这个时候在生产排查问题的时候,就可以通过入参来溯源,简化了排查的难度。
方法级:
一般是不会有的,主要问题在于如果你有一个比较优雅的编程习惯的话,正常情况下逻辑应该是非常清晰的。也就是说正常情况下你拿到了 Controller 的请求参数,然后去看逻辑的话应该是很简单方便的,除非是老代码,逻辑判断非常复杂各个方法耦合非常严重,才需要采用这种方式。
1.2、微服务时代
在微服务时代,由于存在多服务之间互相调用的问题,一般会在流量入口处(比如说 GateWay)多加一个日志。
也就是说这种情况下分为三种粒度:
- 网关级的出入参记录
- 接口级的出入参记录
- 方法级的出入参记录
二、实现接口级出入参记录
接口级的具体实现方式一般分为三种:
- 通过 HandlerInterceptor 的方式进行拦截
- 通过 Spring 的切面
- 通过 Filter
这三种的相对来说 Filter 的性能是最好的,因为它是流量的出入口,下面将采用 Nacos+Filter 来实现。
2.1、Nacos 配置类
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* @ClassName AutoLogConfig
* @Author lizelin
* @Description 日志 Nacos 动态刷新配置
* @Date 2023/11/3 18:01
* @Version 1.0
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "auto.log")
public class AutoLogConfig {
/**
* 是否开启日志开关
*/
private Boolean enabled = false;
/**
* 配置需要输出的 headers
*/
private String[] headers;
/**
* 是否打印所有请求头
*/
private Boolean printAllHeaders = false;
/**
* 排除前缀 Url
*/
private String[] excludePrefixUrls;
}
yaml 不会写的话,可以参照 yaml书写指南
2.2、日志实现
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.Ordered;
import org