/*** 统一日志处理Handler

*@authorMingchenchen

**/

public classLogAopHandler {

@AutowiredprivateAuditLogDao auditLogDao;/*** controller层面记录操作日志

* 注意此处是aop:around的 因为需要得到请求前的参数以及请求后接口返回的结果

*@throwsThrowable*/

public Object doSaveLog(ProceedingJoinPoint joinPoint) throwsThrowable {

MethodSignature method=(MethodSignature) joinPoint.getSignature();

String methodName=method.getName();

Object[] objects=joinPoint.getArgs();

String requestBody= null;if (objects!=null && objects.length>0) {for(Object object : objects) {if (object == null) {

requestBody= null;//POST接口参数为空 比如删除XXX

}else if (object instanceofString) {

requestBody= (String) object;//有些接口直接把参数转换成对象了

}else{

requestBody=JSONObject.toJSONString(object);

}

}

}//只记录POST方法的日志

boolean isNeedSaveLog = false;//此处不能用getAnnotationByType 是JAVA8的特性,因为注解能够重名,所以得到的是数组

RequestMapping annotation = method.getMethod().getAnnotation(RequestMapping.class);for(RequestMethod requestMethod : annotation.method()) {if (requestMethod==RequestMethod.POST) {

isNeedSaveLog= true;

}

}

JSONObject requestBodyJson= null;try{

requestBodyJson=JSONObject.parseObject(requestBody);

}catch(Exception e) {//do nothing 即POST请求没传body

}

HttpServletRequest request=RequestContextUtil.getRequestByCurrentContext();

String userName=RequestContextUtil.getUserNameByCurrentContext();if(StringUtil.isEmpty(userName)) {try{

userName= DmsCache.get(requestBodyJson.getString("userName")).getName();

}catch(Exception e) {

userName=RequestContextUtil.getAsynUserInfoByAutoDeploy().getName();

}

}//得到request的参数后让方法执行它//注意around的情况下需要返回result 否则将不会返回值给请求者

Object result =joinPoint.proceed(objects);try{

JSONObject resultJson=JSONObject.parseObject(result.toString());if (isNeedSaveLog) {//如果是POST请求 则记录日志

LogTypeEnum logTypeEnum =LogTypeEnum.getDesByMethodName(methodName);if (logTypeEnum != null) {

AuditLogEntity auditLogEntity= newAuditLogEntity();

auditLogEntity.setUuid(StringUtil.createRandomUuid());

auditLogEntity.setOperator(userName);

auditLogEntity.setRequestIp(request.getRemoteAddr());

auditLogEntity.setRequestUrl(request.getRequestURI().replace("/cloud-master", ""));

auditLogEntity.setEventType(logTypeEnum.getKey());

auditLogEntity.setEventDesc(logTypeEnum.getDescription());

auditLogEntity.setRequest(requestBody);int isSuccess = "200".equals(resultJson.getString("code")) ? 1 : 0;

auditLogEntity.setSuccessFlag(isSuccess);

auditLogEntity.setResponse(result.toString());

auditLogEntity.setCreateTime(newDate());

auditLogDao.insert(auditLogEntity);

}

}

}catch(Exception e) {

e.printStackTrace();

}returnresult;

}

}

java操作日志记录_通用日志记录(java)相关推荐

  1. python代码执行过程记录_优雅的记录Python程序日志

    1 本篇概要 logging模块的调用: 保存log日志为文件: 调整输入日志等级: 修改日志消息格式: 2 前言 在使用Python编写程序的过程中,我们经常使用print()函数打印一些信息到控制 ...

  2. golang 日志分析_容器日志采集利器:Filebeat深度剖析与实践

    在云原生时代和容器化浪潮中,容器的日志采集是一个看起来不起眼却又无法忽视的重要议题.对于容器日志采集我们常用的工具有filebeat和fluentd,两者对比各有优劣,相比基于ruby的fluentd ...

  3. 日志间隔_在日志中搜索时间间隔

    日志间隔 介绍 这篇文章与我有关日志分析的迷你系列文章间接相关. 最好阅读两个主要部分,以更好地理解我在说什么. 第1 部分 , 第2部分 . 这篇文章描述了我在实现IDE方法时遇到的一个重要问题. ...

  4. mysql 事务日志备份_事务日志备份与恢复 5

    14.5 用Bak文件恢复到故障点的奥秘 如果数据库被损坏,我们就只能利用备份集文件(通常扩展名为BAK)来恢复数据库,如果备份集中包含了尾日志备份,我们同样能将数据库恢复到故障点. 前面我们已经介绍 ...

  5. mysql事务日志备份_事务日志备份 (SQL Server)

    事务日志备份 (SQL Server)Transaction Log Backups (SQL Server) 01/05/2018 本文内容 适用于:Applies to: SQL ServerSQ ...

  6. java 网络爬虫 正则表达式_【干货】Java网络爬虫基础知识

    原标题:[干货]Java网络爬虫基础知识 引言 Java 网络爬虫具有很好的扩展性可伸缩性,其是目前搜索引擎开发的重要组成部分.例如,著名的网络爬虫工具 Nutch 便是采用 Java 开发,该工具以 ...

  7. java list e 查找_源码(04) -- java.util.ListE

    java.util.List 源码分析(JDK1.7) ------------------------------------------------------------------------ ...

  8. java单机应用程序_一个简单的java桌面应用:单机版IFTTT

    1.项目背景: ifttt是"if this then that"的缩写,事实上是让你的网络行为能够引发连锁反应.让你使用更为方便.ifttt旨在帮助人们利用各网站的开放API,将 ...

  9. 西电java实验报告 界面_西电计算机Java上机实验报告.docx

    西电计算机Java上机实验报告.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. ...

最新文章

  1. 正则表达式匹配分组(|、(ab)、\num、(?P<name>)(?P=name))
  2. 表达不同与构建不同: 对计算机的唯一真正的要求 (TrustNo.1 ) -- 待修改!!!...
  3. VS Code(Visual Studio Code)编辑器的常用设置
  4. JUC锁-ReentrantReadWrite(五)
  5. eap和psk_针对WildFly和EAP运行Java Mission Control和Flight Recorder
  6. 【福利】3980元的web前端视频教程限量领取!!!
  7. pyqt5 显示更新进度条_python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能...
  8. Hive——元数据表含义
  9. 对图像进行各种滤波的编程思路
  10. 毛伟:重塑网络根基——国际形势使然,技术升级必然
  11. java 加载dll文件
  12. java 生成pdf文件_Java 生成PDF文档的示例代码
  13. vuerouter4报错:Discarded invalid param(s) “name“, “age“ when navigating.
  14. CRC-16校验(多项式为x16+x15+x2+1):
  15. app注册协议做法和注意事项
  16. Android怎么实现数字增减,Android实现数字跳动效果的TextView方法示例
  17. php论坛整合,PHPCMS整合Discuz论坛
  18. Redis集群原理与容器化部署集群
  19. python日期和时间的操作方法
  20. 做一个简单的打飞碟游戏

热门文章

  1. java中的private public protected
  2. java创建对象new后面为啥可以传入参数_你有认真了解过自己的“Java对象”吗?渣男...
  3. Elastic Stack简介
  4. 【机器学习】熵、决策树、随机森林 总结
  5. mac电脑如何与手机同步复制粘贴_如何将电脑里的文件同步到手机里?
  6. VS toolTip1控件的使用1
  7. layer ajax 用法,layer加载遮罩层使用 Ajax Loading Demo
  8. kernel启动过程总结的思维导图
  9. PHP+Ajax手机移动端发红包实例
  10. ios 后台下载,断点续传总结