Spring 封装操作日志记录功能

前言

Spring 封装操作日志记录功能并不复杂,其实现的方案有许多种。有的通过拓展拦截器来进行记录, 有的通过AOP,自定义注解来标记记录。以上方案,个人觉得都不太好。通过拦截器来记录,需要重写HttpReponseWrapper。因为HttpRequest的body和HttpResponse的body都是流,只能单向读取;而通过自定义注解来标记记录,不方便集中管理,还造成冗余注解的情况。

所以针对以上弊点,个人整理另一种基于AOP的方式来进行记录操作日志的方案。这种方案可以做到对controller层的方法零侵入性,以及对需要进行操作日志记录的接口进行集中管理。

代码

  1. 操作日志实体类
/**
 * 系统日志
 * @author rocky
 * @date 2021/12/18 23:12
 */
@Data
@TableName("sys_log")
@EqualsAndHashCode(callSuper = false)
public class SysLog extends BaseNoRecorderModel {
   

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /** 标题 */
    private String title;

    /** 模块 */
    private String module;

    /** 内容 */
    private String content;

    /** api */
    private String api;

    /** 请求内容 */
    private String request;

    /** 响应内容 */
    private String response;

    /** 操作人 */
    private String operator;

    /** 请求IP */
    private String requestIp;

}

  1. 操作日志DTO
/**
 * 操作日志DTO
 * 主要为了读取操作日志拦截配置
 * @author rocky
 * @date 2021/12/18 23:19
 */
@Data
@XStreamAlias("log")
public class LogDTO {
   

    @XStreamImplicit(itemFieldName = "logModule")
    private List<LogModule> logModules = new ArrayList<>();

    @Data
    @XStreamAlias("logModule")
    public static class LogModule implements Serializable {
   

        @XStreamAsAttribute
        private String path;

        @XStreamAsAttribute
        private String module;

        @XStreamImplicit(itemFieldName = "logPath")
        private List<LogPath> logPaths = new ArrayList<>();
    }

    @Data
    @XStreamAlias("logPath")
    @XStreamConverter(value= ToAttributedValueConverter.class, strings={
   "path"})
    public static class LogPath implements Serializable 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值