概述

在平台中一些操作需要进行日志记录。一般的情况我们只需要记录,某某人操作了某个日志方法。但是有些情况下,我们需要更详细的信息,比如添加用户时,添加了某某用户,删除了某某用户,或者在更新的时候,一些关键的数据做了变更都需要进行记录。

2. 实现方法

2.1. 使用切面实现

不是所有的方法都需要切面拦截 ,只有 AuditLog 注解的方法才会被拦截。

@ApiOperation(value = "用户登录")
    @AuditLog(operation = "用户登录")
    @PostMapping(SecurityConstants.PASSWORD_LOGIN_PRO_URL)
    public void login(

2.2. 在需要拦截的类上添加注解

@ClassDefine(title = "用户认证",packageName = "认证中心",alias = "aAuth2Controller",path = "")
@Slf4j
@RestController
public class OAuth2Controller {

关键的参数:
packageName:子系统模块
title:子模块

2.3. 在实体类增加注解

这个主要时控制我们的一些通用的方法,比如用户添加或用户更新,这个时候我们可能需要记录他的 一些关键信息,比如 账号,用户名等。

比如:在更新一个用户的时候,我们希望记录

更新用户:用户名:林冲 改为 林冲001 这样的信息。

注解定义为:

com.redxun.log.annotation.FieldDef

属性为 :

属性 说明
comment 字段注解
add 在添加时记录该字段
upd 在更新时记录该字段
del 在删除时记录该字段
format 日期格式化使用
suffix 后缀,比如 请假多少天
nameClass 这个作用是当前的字段是一个ID时候,需要显示它的名称,可以指定 INameService接口的实现

2.4. 记录详细日志

出了一些通用的方法,我们可以通过以上的方法进行日志记录,但是在有些情况下,一些特定的方法也需要记录日志,比如:修改用户密码,这个我们要知道,什么时候修改了谁的密码。

这个时候,我们可以在这些方法中使用一下的Api 记录这些详细的日志信息。

//记录操作数据的主键数据
LogContext.put(Audit.PK,entity.getPkId());
//记录动作(比如 Audit.ACTION_ADD)
LogContext.put(Audit.ACTION,Audit.ACTION_ADD);
//记录操作的详细信息
LogContext.put(Audit.DETAIL, fieldInfo);
//记录操作方法
LogContext.put(Audit.OPERATION,operation);

2.5 记录日志的效果

3. 开发部署

3.1 jpaas-log-spring-boot-starter 日志模块

日志记录在这个模块中完成,我们的日志记录可以有多种方式
1.log4j
如果我们希望将日志写入到日志文件,我们可以修改 nacos 的nacos-config-dev.propertiesredxun.audit-log.log-type=logger

2.数据库记录

将日志写入到数据库,我们可以修改 nacos 的nacos-config-dev.propertiesredxun.audit-log.log-type=db

在这种情况下,我们的日志是先通过消息队列将日志数据发送到队列,然后队列通过消费将日志记录到数据库中。

3.2 修改 nacos-config-dev.properties 发送队列配置

如果我们在微服务中将日志写到 数据库,我们需要在 nacos-config-dev.properties增加发送队列的配置

# 日志记录队列配置
spring.cloud.stream.bindings.logOutput.destination=log
spring.cloud.stream.bindings.logOutput.group= log-group

3.4 修改 jpaas-system-dev.properties 消费队列配置

如果我们在微服务中将日志写到 数据库,我们需要在 jpaas-system-dev.properties增加消费队列的配置

# 日志记录队列配置
spring.cloud.stream.bindings.logInput.destination= log
spring.cloud.stream.bindings.logInput.group= log-group-consumer

3.5 在新开发的应用需要使用队列记录日志

我们需要在应用中增加日志发送的配置。

@EnableBinding({UserInputOutput.class, LogOutput.class})
public class JpaasUserApplication {

增加 LogOutput 日志输出的引用。

文档更新时间: 2021-07-19 18:40   作者:zyg