美文网首页
日志系统

日志系统

作者: 榷奕 | 来源:发表于2019-10-13 18:42 被阅读0次

1. 日志系统的难点在于AOP的应用

得把aop到底能拿来干什么整理一下,常用的那些函数,怎么构建切点切面什么的都得整理!!!

2. 日志数据表设计

从这张表的设计上面也就能看出日志系统的基本功能是什么,即:

核心是记录:谁,在什么时候,调用了哪个接口。
字段名 注释 类型 长度 是否必填 是否主键
client_ip 客户端ip varchar 100
req_uri 请求映射路径 varchar 100
method 方法名 varchar 200
param 参数 text 0
operator 操作人姓名 varchar 100
start_time 接口请求时间 varchar 50
end_time 接口返回时间 varchar 50
total_time 总消耗时间 varchar 50
return_data 接口返回数据 text 0
gmt_create 创建时间 datatime 0
gmt_create_user 创建人 varchar 50
gmt_modified 修改时间 datatime 0
gmt_modified_user 修改人 varchar 50
is_delete 是否删除(0:否 1:是) tinyint 2

3. 切面类代码

@Aspect
@Component
public class SystemLogAspect {
    
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
    @Autowired
    private SystemLogDAO systemLogDAO;
    
    //这个逻辑还是有趣,只要是这个包里面的类都自动建立代理类,所有方法就都给代理了。
    @Pointcut("execution(public * com.cy.ops.api.*.controller..*(..))")
    public void systemLog() {}
 
    @Around(value = "systemLog()")
    public ResponseResult doAround(ProceedingJoinPoint joinPoint) throws Throwable {
        ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        HttpServletResponse response = attributes.getResponse();
        UserInfoBO userInfo = WebSession.getUserInfo(request, response);
        if(userInfo == null) {
            return new ResponseResult().setSuccess(false).setMessage(ResultCode.RECORD_LOGIN_EXPIRE.getMessage()).setCode(ResultCode.RECORD_LOGIN_EXPIRE.getCOde());
        }
                
        // 1、记录执行时间
        long startTime = System.currentTimeMillis();
        ResponseResult result = (ResponseResult) joinPoint.proceed(joinPoint.getArgs());
        long endTime = System.currentTimeMillis();
        long totalTime = endTime - startTime;
        
        
        // 2、有无日志监控注解,有则输出
        String methodName = joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()";
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        Method targetMethod = nethodSignature.getMethod();
        //这个注解的意思是如果有这个注解,就log出来
        //打这个注解的应该是debug用到的重点,这里可以换一下逻辑,log的时候把参数和输出打印出来
        if(targetMethod.isAnnotationPresent(ControllerMonitor.class)) {
            logger.info("**********Method: {}, Start: {}, End: {}, Total: {}ms**********", methodName, dateFormat.format(startTime), dateFormat.format(endTime), totalTime);
        }
        
        
        // 3、存入数据库
        //不管有没有注解,都要把访问记录存到数据库里面去
        //(感觉这才是比较赞的逻辑,只要访问了,那就要存到数据表里面,不过查bug的时候,可以重点查一下输出出来的日志)
        SystemLogDO systemLogDO = new SystemLogDO();
        if(joinPoint.getArgs().length > 0){
            systemLogDO.setPara(JsonToBeanUtil.beanToJSON(joinPoint.getArgs()[0]));
        }
        systemLogDO.setClientIp(IpUtil.getClientIp(request));
        systemLogDO.setMethod(joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()");
        systemLogDO.setOperator(userInfo.getUserName());
        systemLogDO.setReqUri(request.getRequestURI());
        systemLogDO.setReturnData(JsonToBeanUtil.beanToJSON(result));
        systemLogDO.setStartTime(String.valueOf(startTime));
        systemLogDO.setEndTime(String.valueOf(endTime));
        systemLogDO.setTotalTime(String.valueOf(totalTime));
        systemLogDO.setGmtCreateUser(userInfo.getUserName());
        systemLogDO.setGmtModifiedUser(userInfo.getUserName());
        systemLogDO.setIsDelete(0);
        systemLogDAO.insert(systemLogDO);
        return result;
    }
}

相关文章

  • Funboot开发:系统日志组件

    系统日志组件 目录 系统日志 使用MongoDb存储日志 系统日志 系统日志分为操作日志、错误日志、登录日志、数据...

  • 【问答】Linux

    Linux系统日志在哪里看 Linux日志分为内核及系统日志、用户日志、应用日志;系统日志由rsyslog服务统一...

  • Linux日志管理:

    rsyslog 系统日志管理 logrotate日志轮转 rsyslog部分: rsyslog是系统专职日志程序,...

  • 日志管理

    一、rsyslogd: 系统专职日志程序。将绝大部分日志记录, 系统日志程序和系统操作有关,安全,...

  • 日志系统架构介绍(非原创)

    文章大纲 一、日志系统概念介绍二、ELK日志系统介绍三、互联网行业日志处理方案介绍四、参考文章 一、日志系统概念介...

  • 5.4 痕迹清理

    5.4.1. Windows 操作日志:3389登录列表、文件访问日志、浏览器日志、系统事件 登录日志:系统安全日...

  • 如何优雅地记录操作日志

    操作日志几乎存在于每个系统中,而这些系统都有记录操作日志的一套 API。操作日志和系统日志不一样,操作日志必须要做...

  • 日志审计系统的基本原理

    日志审计系统简介 什么是日志审计? 综合日志审计平台,通过集中采集信息系统中的系统安全事件、用户访问记录、系统运行...

  • LabVIEW怎么实现监控的日志系统

    在linux中有内建基于日志系统标准协议的日志记录系统,详情参考笔者的文章-Linux日志系统架构和文件[ht...

  • 开源实时日志分析ELK平台部署

    开源实时日志分析ELK平台部署 日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服...

网友评论

      本文标题:日志系统

      本文链接:https://www.haomeiwen.com/subject/jtrkmctx.html