当前位置: 首页 > news >正文

aop 简单运用,traceId 简单实现,访问日志拦截,ip黑名单

总结:aop 简单运用,

  比如 1.系统长时间运行你怎样很容易找到 那些url 访问最多(一般80%的请求都在常用链接上 2,8 原则) 那些耗时较长 具体优化重点(不需要乱优化一通)阿里数据源可以监控sql 耗时(这里我提下)

                2. 如何快速点位 那台服务器出问题 快速找到(如果服务器多了 日志寻找也是 麻烦事情 统一(elk + beats 这种插件 组合 完全可以胜任 中小企业 当然中间还也可加消息系统扩展)使用

      traceId 就可以很容易 只需要搜一下traceId 一样的就是 同一个请求了 在定位服务 就行 当然开源产品 很多 zipkin 或者 SkyWalking 都很不多  我这里只是简单实现
3. 还可以做 ip 黑名单 等

代码如下 当然跟对细节 请看我代码库
public static final String TRACEID = "traceId";
/**
* 环绕通知,环绕增强,相当于MethodInterceptor
* 可以考虑 日志保存 在数据库或者 其他容器 或者发给消息系统
* 1.系统分开部署 可以考虑 使用 traceId 一条(我这里简单UUID 实现) 完整的结果 id 唯一 这里还可以带上 用户信息
* 可以考虑 成熟 开源 zipkin 或者 SkyWalking
* 2 .还可以监控 url 访问次数 (这里我就不具体实现了)比如直接聚合 那些url 耗时较长
  * 3. 还可以做 ip 黑名单 等

*/
@Around("webLog()")
public Object arround(ProceedingJoinPoint pjp) {
logger.info("方法环绕start.....");
Long start = System.currentTimeMillis();
try {
// 接收到请求,记录请求内容
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String traceId = UUID.randomUUID().toString();
//方便查找那台服务器报错
InetAddress addr = InetAddress.getLocalHost();
String ip = addr.getHostAddress().toString();
String hostName = addr.getHostName().toString();
//错误结果处理可以后续请求拿到
request.setAttribute(TRACEID,traceId);
// 记录下请求内容
logger.info("traceId : {}" , traceId);

logger.info("host : {} id {}" ,hostName,ip );
logger.info("contextPath : {}" , request.getContextPath());
logger.info("servletPath : {}" , request.getServletPath());
logger.info("url : {}" ,request.getRequestURL());
logger.info("uri : {}" ,request.getRequestURI());
logger.info("http_method : {}" , request.getMethod());
logger.info("IP:{}" , IpUtils.getIpAddr(request));
logger.info("class_method : {},{}" , pjp.getSignature().getDeclaringTypeName() ,pjp.getSignature().getName());
Object[] args = pjp.getArgs();
//序列化目的反正对象里面数组打印原始hash 值 看不清楚
logger.info("args : {},序列化数据:{}" , StringUtils.join(args,","),JSONUtil.parse(args));
Object o = pjp.proceed();
logger.info("方法环绕proceed,正常结果response :" + o);
return o;
} catch (Throwable e) {
//注意由于全局异常处理 这里需要抛出,不然全局异常会认为 方法没有出错
logger.info("异常通知.....");
throw new RuntimeException(e);
}finally {
Long end = System.currentTimeMillis();
logger.info("最后通知.....耗时:{}秒",(end-start)/1000);
}
}

          

 

 

转载于:https://www.cnblogs.com/lyc88/articles/10984351.html

相关文章:

  • MySQL学习笔记 初学基础篇
  • Linux磁盘及文件系统的管理
  • PC端和移动端测试区别
  • Zabbix 3.0 主备模式 [八]
  • 如何接入新连接
  • centos7 firewall操作
  • vscode 终端下载vue
  • ./和../以及/和~之间的区别
  • 2016.8.17服务器端数据库用户导入导出方法 expdp和impdp
  • 十年码农建议:写代码时应该反复问自己8个问题
  • quartz学习
  • 6.10 docker(四)进入容器
  • 【Todo】Nodejs学习计划
  • 2019西安联训B层 Day 5 test T2 排列组合
  • pg_bulkload
  • .pyc 想到的一些问题
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • css属性的继承、初识值、计算值、当前值、应用值
  • ES6--对象的扩展
  • HTML5新特性总结
  • iOS | NSProxy
  • Java|序列化异常StreamCorruptedException的解决方法
  • mongodb--安装和初步使用教程
  • mysql_config not found
  • MySQL-事务管理(基础)
  • mysql外键的使用
  • overflow: hidden IE7无效
  • php中curl和soap方式请求服务超时问题
  • 对超线程几个不同角度的解释
  • 好的网址,关于.net 4.0 ,vs 2010
  • 回顾 Swift 多平台移植进度 #2
  • 简单实现一个textarea自适应高度
  • 数据仓库的几种建模方法
  • 算法-插入排序
  • 我看到的前端
  • - 转 Ext2.0 form使用实例
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • scrapy中间件源码分析及常用中间件大全
  • 数据可视化之下发图实践
  • 通过调用文摘列表API获取文摘
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (rabbitmq的高级特性)消息可靠性
  • (备忘)Java Map 遍历
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (原創) 物件導向與老子思想 (OO)
  • (转)可以带来幸福的一本书
  • .Family_物联网
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net6+aspose.words导出word并转pdf
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复