zoukankan      html  css  js  c++  java
  • 记一次基于springboot+aop实现日志记录实战

    1. 为什么要记录日志

    好处:

          a. 可以对一些重要功能进行记录,方便以后跟踪是谁操作此功能的。
          b. 在操作某些功能时可能会发生异常,但每次出现异常我们想定位日志都要去服务器查看我们的日志。有了日志记录,就能记录下该次异常,以便我们统计出现的次数或发生的时间。
          c. 可以对用户行为进行分析,了解用户常用操作,方便定点推送消息。
    


    2. 为什么采用aop来做日志

    好处:

          a. aop是面向切面编程的,符合开闭原则。能做到不修改原代码的基础上对代码进行扩展。
          b. aop是spring的核心功能,spring对其已经集成,容易上手。
          其他日志解决方案:拦截器
    


    3. 实战开始

    好的文章:https://blog.csdn.net/weixin_45137090/article/details/91434347
    好的文章:https://www.cnblogs.com/daichangya/archive/2013/05/12/12959708.html
    视频教学:https://www.bilibili.com/video/BV1bf4y187KX
    需求:记录用户的重要操作

    3.1 创建数据库表



    3.2 创建日志实体类

    public class ProprietorLog implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        @ApiModelProperty(value = "主键id")
        private Long id;
    
        @ApiModelProperty(value = "操作人姓名")
        private String name;
    
        @ApiModelProperty(value = "操作人所在城市")
        private String city;
    
        @ApiModelProperty(value = "操作人所在社区")
        private String community;
    
        @ApiModelProperty(value = "操作人电话")
        private String phone;
    
        @ApiModelProperty(value = "访问ip")
        private String ipAddress;
    
        @ApiModelProperty(value = "功能描述")
        private String explain;
    
        @ApiModelProperty(value = "请求地址")
        private String url;
    
        @ApiModelProperty(value = "请求方式")
        private String requestMethod;
    
        @ApiModelProperty(value = "请求模块")
        private String module;
    
        @ApiModelProperty(value = "请求结果 0 成功 1失败")
        private Integer status;
    
        @ApiModelProperty(value = "请求参数")
        private String parameter;
    
        @ApiModelProperty(value = "操作类型")
        private String operationType;
    
        @ApiModelProperty(value = "总耗时 毫秒(单位)")
        private Integer runtime;
    
        @ApiModelProperty(value = "异常信息")
        private String exceptionInfo;
    
        @ApiModelProperty(value = "创建时间")
        private Date createTime;
    
        @ApiModelProperty(value = "修改时间")
        private Date updateTime;
    }
    

    3.3 创建自定义注解

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Log {
    	/**
    	 * 操作类型
    	 */
    	String operationType() default LogTypeConst.OTHER;
    
    	/**
    	 * 操作模块
    	 */
    	String module() default LogModule.OTHER;
    
    	/**
    	 * 功能描述
    	 */
    	String explain() default "";
    
    	/**
    	 * 是否保存请求参数
    	 */
    	boolean isSaveRequestData() default true;
    }
    

    3.4 创建切面类


    3.5 将数据写入数据库

  • 相关阅读:
    Oracle的 listagg() WITHIN GROUP ()函数使用
    AJAX工作原理与缺点
    牛客网数据库SQL实战(此处只有答案,没有表内容)
    Jsp的四大作用域与九大对象
    eclipse的debug调试技巧
    浏览器与服务器交互
    eclipse图标含义
    不要在构造和析构函数中调用虚函数
    构造,析构 cpp
    2 c++对象被使用前要先被初始化
  • 原文地址:https://www.cnblogs.com/itlihao/p/14316600.html
Copyright © 2011-2022 走看看