java操作日志记录_通用日志记录(java)
/*** 统一日志处理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)相关推荐
- python代码执行过程记录_优雅的记录Python程序日志
1 本篇概要 logging模块的调用: 保存log日志为文件: 调整输入日志等级: 修改日志消息格式: 2 前言 在使用Python编写程序的过程中,我们经常使用print()函数打印一些信息到控制 ...
- golang 日志分析_容器日志采集利器:Filebeat深度剖析与实践
在云原生时代和容器化浪潮中,容器的日志采集是一个看起来不起眼却又无法忽视的重要议题.对于容器日志采集我们常用的工具有filebeat和fluentd,两者对比各有优劣,相比基于ruby的fluentd ...
- 日志间隔_在日志中搜索时间间隔
日志间隔 介绍 这篇文章与我有关日志分析的迷你系列文章间接相关. 最好阅读两个主要部分,以更好地理解我在说什么. 第1 部分 , 第2部分 . 这篇文章描述了我在实现IDE方法时遇到的一个重要问题. ...
- mysql 事务日志备份_事务日志备份与恢复 5
14.5 用Bak文件恢复到故障点的奥秘 如果数据库被损坏,我们就只能利用备份集文件(通常扩展名为BAK)来恢复数据库,如果备份集中包含了尾日志备份,我们同样能将数据库恢复到故障点. 前面我们已经介绍 ...
- mysql事务日志备份_事务日志备份 (SQL Server)
事务日志备份 (SQL Server)Transaction Log Backups (SQL Server) 01/05/2018 本文内容 适用于:Applies to: SQL ServerSQ ...
- java 网络爬虫 正则表达式_【干货】Java网络爬虫基础知识
原标题:[干货]Java网络爬虫基础知识 引言 Java 网络爬虫具有很好的扩展性可伸缩性,其是目前搜索引擎开发的重要组成部分.例如,著名的网络爬虫工具 Nutch 便是采用 Java 开发,该工具以 ...
- java list e 查找_源码(04) -- java.util.ListE
java.util.List 源码分析(JDK1.7) ------------------------------------------------------------------------ ...
- java单机应用程序_一个简单的java桌面应用:单机版IFTTT
1.项目背景: ifttt是"if this then that"的缩写,事实上是让你的网络行为能够引发连锁反应.让你使用更为方便.ifttt旨在帮助人们利用各网站的开放API,将 ...
- 西电java实验报告 界面_西电计算机Java上机实验报告.docx
西电计算机Java上机实验报告.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. ...
最新文章
- 正则表达式匹配分组(|、(ab)、\num、(?P<name>)(?P=name))
- 表达不同与构建不同: 对计算机的唯一真正的要求 (TrustNo.1 ) -- 待修改!!!...
- VS Code(Visual Studio Code)编辑器的常用设置
- JUC锁-ReentrantReadWrite(五)
- eap和psk_针对WildFly和EAP运行Java Mission Control和Flight Recorder
- 【福利】3980元的web前端视频教程限量领取!!!
- pyqt5 显示更新进度条_python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能...
- Hive——元数据表含义
- 对图像进行各种滤波的编程思路
- 毛伟:重塑网络根基——国际形势使然,技术升级必然
- java 加载dll文件
- java 生成pdf文件_Java 生成PDF文档的示例代码
- vuerouter4报错:Discarded invalid param(s) “name“, “age“ when navigating.
- CRC-16校验(多项式为x16+x15+x2+1):
- app注册协议做法和注意事项
- Android怎么实现数字增减,Android实现数字跳动效果的TextView方法示例
- php论坛整合,PHPCMS整合Discuz论坛
- Redis集群原理与容器化部署集群
- python日期和时间的操作方法
- 做一个简单的打飞碟游戏
热门文章
- java中的private public protected
- java创建对象new后面为啥可以传入参数_你有认真了解过自己的“Java对象”吗?渣男...
- Elastic Stack简介
- 【机器学习】熵、决策树、随机森林 总结
- mac电脑如何与手机同步复制粘贴_如何将电脑里的文件同步到手机里?
- VS toolTip1控件的使用1
- layer ajax 用法,layer加载遮罩层使用 Ajax Loading Demo
- kernel启动过程总结的思维导图
- PHP+Ajax手机移动端发红包实例
- ios 后台下载,断点续传总结