🔥🔥记录接口请求日志🔥🔥
为项目相关分析提供数据支撑。此日志信息有别于项目中的log日志,这里只是记录web接口的请求日志。
目前项目中大多数方案是用切面或者拦截器配合注解来做,但是会存在一个问题:每个web项目都要单独实现或者copy一份此逻辑。
考虑到现在项目都微服务化,大量的微服务都需要记录请求日志,但是没有找到符合我们需求的轻量级的好的实现方案,因此有了此项目。
收集的数据,我们可以接入公司开发的相关信息展示系统,也可以找个可视化工具,比如Grafana,效果如下:
一个简单的功能,在使用上,应该也是没有成本的,但是简单的功能,也可以做的更加通用,易用,可靠,可拓展,可选择,零成本,零侵入。
也可以选择禁用:scalog.enable=false
如果公司有私有仓库,可修改pom.xml中的仓库地址,推送到私有仓库。其他项目直接引入依赖即可。(正在考虑直接发布到maven仓库,但是有点麻烦)
在项目数据库中创建数据库表
<dependency>
<groupId>com.java4all</groupId>
<artifactId>scalog</artifactId>
<version>1.3.0-RELEASE</version>
</dependency>
⚠⚠⚠:还需要自行引入对应的数据源依赖。比如你打算使用postgresql存储,还需要引入
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
提供配置项如下:
示例:
scalog:
enable: true
level: all
needResult: false
countryName: 中国
groupName: 谷歌集团
organizationName: 谷歌开源组织
companyName: 谷歌杭州分公司
projectName: 棱镜项目
db: postgresql
url: jdbc:postgresql://xxx.xxx.xxx.xxx:5432/xxx?stringtype=unspecified
username: xxxx
password: xxxxx
driver-class-name: org.postgresql.Driver
# 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
上述步骤完成后,接口请求记录已经可以正常记录。 但是,以下几个字段,是可选项,切面无法拿到,默认为空:
`module_name` char(200) DEFAULT NULL COMMENT '模块名称',
`function_name` char(500) DEFAULT NULL COMMENT '功能名称',
`remark` char(200) DEFAULT NULL COMMENT '备注',
由于切面无法拿到,但是项目中需要定制化记录,所以提供了@LogInfo注解来记录,例如:
/**
* 返利单价列表
* web-授信管理-经销商返利单价列表
* @param pageSize
* @param pageNum
* @return
*/
@LogInfo(moduleName = "授信模块",functionName = "返利单价列表",remark = "获取返利单价列表")
@GetMapping(value = "list")
public ObjectRestResponse list(Integer pageSize,Integer pageNum){
FspPageInfo fspPageInfo = rebateServiceImpl.list(pageSize,pageNum);
return new ObjectRestResponse().data(fspPageInfo);
}
userId等相关的用户信息,不同微服务获取方式可能不一样。目前处理方式为统一从请求头中获取。 前端或者移动端请求头中统一添加:user_id或者userId。 后期会对请求头信息进行拓展。目前只接收userId。