首页 > 其他分享 >异步日志登录

异步日志登录

时间:2023-06-05 20:55:08浏览次数:40  
标签:COMMENT 异步 String 登录 private 操作 日志 方法

异步日志登录

项目亮点 : 放在公司的通用组件库中: 日志记录组件库

  • 系统的用户操作日志记录【解耦合】
    自定义注解 + AOP + 异步多线程/MQ + 数据模型设计 + 设计模式【单例模式+工厂模式】

  • 效果:

    • 开发者只需要在业务方法上,添加一个注解 @Log 就可以实现执行这个方法时,自动记录日志。===> 输出【数据库、文件、ES索引库】
  • 设计数据模型:

    • 日志内容:
      操作人 + 操作时间 + 操作人IP地址 +
      什么操作【 哪个类 + 哪个方法 + 方法参数 + 结果 + 异常信息 】 +
      哪个系统 +
      操作类型【login/logout/ delete/insert ......】

    • 日志表模型

代码具体实现

  1. 自定义一个注解
/**
 *以下四个为springboot元注解,注解类都要有
 */
@Target({ElementType.TYPE,ElementType.METHOD})  //作用范围 :作用类上、方法上
@Retention(RetentionPolicy.RUNTIME)  
@Documented  
@Inherited
public @interface Log {

}
  1. 编写AOP代码实现记录日志的功能:先定义一个通知类【@Aspect】,在通知类中实现记录日志的操作,完成代码增强 = 如下代码

    • 准备工作 :

      • 首先导入依赖 : springboot项目 + AOP

      • 通知类上加注解 :

        @Component
        @Aspect
        
    • 切点表达式 :对所有方法上添加了 @Log 注解的方法进行代码增强,增强的逻辑就是记录日志

          * 对注解方法进行增强
           */
          @Pointcut("@annotation(cn.itcast.common.log.anno.Log)")
          public void pointCut(){}
      
    • 编写通知方法,在通知方法中实现日志的记录

      • 第一步:先需要选择通知类型: @before @after @around @afterReturning @afterThrowing

        • 选择: @afterReturning @afterThrowing
      • 编写通知方法,并在通知方法中完成日志的记录

            /**
             * 记录方法正常返回日志
             * @param joinPoint  切点对象
             * @param result  方法返回结果
             */
            @AfterReturning(pointcut = "pointCut()",returning = "result")  //指定切点表达式 、 结果类型
            public void logSuccess(JoinPoint joinPoint,Object result){
                //TODO 记录日志
            }
        
            /**
             * 记录方法异常抛出异常日志
             * @param joinPoint 切点对象, 可以获取到和增强的目标方法的很多信息
             * @param ex  方法抛出的异常
             */
            @AfterThrowing(pointcut = "pointCut()" ,throwing = "ex")
            public void logException(JoinPoint joinPoint,Throwable ex){
                //TODO 记录日志
            }
        
      • 创建日志表

        CREATE TABLE sys_operate_log(
             id BIGINT PRIMARY KEY,
             operator VARCHAR(20) COMMENT '操作人',
             operate_time DATETIME COMMENT '操作时间',
             operate_ipaddr VARCHAR(15) COMMENT '操作人客户端ip地址',
             method_name VARCHAR(200) COMMENT '执行的类名+方法名',
             method_param LONGTEXT COMMENT '方法参数',
             method_result LONGTEXT COMMENT '返回结果',
             exception LONGTEXT COMMENT '执行异常信息',
        
             operate_type VARCHAR(10) COMMENT '操作类型:login、logout、add、update、query、delete'
        );
        
        
      • 创建实体类SysOperateLog

        package com.itcast.logself.pojo;
        import java.time.LocalDateTime;
        public class SysOperateLog {
            private Long id;
            /**
             * 操作人
             */
            private String operator;
            /**
             * 操作时间
             */
            private LocalDateTime operateTime;
            /**
             * 操作人客户端ip地址
             */
            private String operateIpaddr;
            /**
             * 执行的类名+方法名
             */
            private String methodName;
            /**
             * 方法参数
             */
            private String methodParam;
            /**
             * 返回结果
             */
            private String methodResult;
            /**
             * 执行异常信息
             */
            private String exception;
            /**
             * 操作类型:login、logout、add、update、query、delete
             */
            private String operateType;
        }
        
      • 创建mapper层

标签:COMMENT,异步,String,登录,private,操作,日志,方法
From: https://www.cnblogs.com/psuitj/p/projectHighlights.html

相关文章

  • Cisco 路由器登录标语
    Router(config)#bannerlogin'haha'设置本地登录标语Router(config)#bannermotd'xixi'设置启动标语......
  • 前后端分离架构下使用 Sa-Token 完成登录认证
    一、架构分析目前绝大多数系统都已经采用“前后端分离”架构来设计了,传统的Session模式鉴权也不再适合这种架构(或者需要额外写很多的代码来专门适配)。Sa-Token是一个java轻量级权限认证框架,专为前后端分离架构打造,主要解决登录认证、权限认证、单点登录、OAuth2、微服务网......
  • C#异步编程2
                                  ......
  • 【解决方法】网络设备使用CLI命令行模式进入SSH登录,如交换机,路由器
    环境:工具:锐捷EVE模拟器,VMwareWorkstationPro远程工具:SecureCRT系统版本:Windows10问题描述:描述:在实验使用路由器远程SSH登录交换机时,无法连接,一直提示:%Unrecognizedhostoraddress,orprotocolnotrunning.提示:若按照教程还是无法完成操作,可以进入右侧的企鹅,......
  • asp.net core NLog将日志写到文件
    1、安装Nlog包Install-PackageNLog.Extensions.Logging-Pre2、在项目添加nlog.config文件 2.1、nlog.config <?xmlversion="1.0"encoding="utf-8"?><nlogxmlns="http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi="http:......
  • 使用定时任务+脚本方式对nginx进行日志切分
    使用定时任务+脚本方式对nginx进行日志切分nginx路径:/home/nf/nginxnginx日志路径:/home/nf/nginx/logs切分目标文件:access.logerror.log创建脚本: 1vim/home/nf/cut_nginx_log.sh 1#!/bin/bash2#nginxlogpath3LOGS_PATH=/home/nf/nginx/logs4YESTERDAY=$(d......
  • 为SpringBoot Admin监控的服务端加上登录认证
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>packagecom.ciih.refineinner.config;importlombok.extern.slf4......
  • 为SpringBoot Admin加上登录认证
    依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>配置server:port:8000spring:security:user:n......
  • authorized_keys文件权限过大导致ssh免密登录失败
    Linux服务器~/.ssh/authorized_keys文件权限过大会导致远程主机免密登录本机失败,主要是基于安全性的考虑经过测试,对于CentOS7.6,authorized_keys属组或其他用户具有写权限时,免密会失败;对于Ubuntu20.04,authorized_keys其他用户具有写权限时,免密会失败。不论是哪个发行版,authori......
  • SpringBoot中的定时任务的同步与异步
    SpringBoot中的定时任务的同步与异步你确定真的知道?授人以渔Java领域;架构知识;面试心得;互联网行业最新资讯定时任务调度功能在我们的开发中是非常常见的,随便举几个例子:定时清除一些过期的数据,定时发送邮件等等,实现定时任务调度的方式也十分多样,本篇文章主要学习各种实现定时任务......