简介

主要记录一下项目中的日志拦截和异常拦截,由于之前公司项目为单体项目,所使用的日志拦截较为简单,只是用拦截器进行前后对日志的拦截,异常拦截直接使用@ExceptionHandler,而现在公司接口使用的dubbo协议通信,一个网关将http协议转为dubbo协议调用,属于分布式项目,日志记录我觉得有点意思,是我之前所没有想到的。

主要流程

前提是公司所有的请求参数都封装到一个对象中,然后该类继承自一个DefaultRequest类,该类中有统一的封装参数,如requestId等等。
首先请求到了网关,网关分派一个唯一requestId存储到请求对象中,然后转发到对应的服务中,如果对应的服务继续调用其他的服务则继续将该requestId传递下去,这样通过requestId就可以找到所有的相关日志了。
而在日志的拦截上使用的是aop环绕通知拦截的,顺带把异常信息也拦截了,但是大家注意只要拦截接口层,不要拦截业务层,否则声明式事务将会失效

aop代码

这里我就不贴公司代码了,我自己模拟一下

 1@Component
2@Aspect
3@Slf4j
4public class LogAop {
5
6    @Pointcut("execution(public * com.xiaoguo.web.controller.*.*(..))")
7    public void point() {
8    }
9
10
11    @Around("point()")
12    public Object doAroundAdvice(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
13        long startTime = System.currentTimeMillis();
14        //对参数进行分析
15        Object firstArg = proceedingJoinPoint.getArgs()[0];
16        String requestId = "test";
17        if (firstArg instanceof DefaultRequest) {
18            requestId = ((DefaultRequest) firstArg).getRequestId();
19        }
20        log.info("{}请求开始: {}", requestId, startTime);
21        Object obj = null;
22        try {
23            obj = proceedingJoinPoint.proceed();
24        }
25        //自定义异常拦截(这里用 RuntimeException 暂时代替一下明白意思就行)
26        catch (RuntimeException r) {
27            long endTime = System.currentTimeMillis();
28            log.info("{}xxx{}: {}", requestId, r.getMessage(), endTime - startTime, r);
29            return r.getMessage();
30        }
31        //未知异常拦截
32        catch (Exception e) {
33            long endTime = System.currentTimeMillis();
34            log.info("{}异常结束: {}", requestId, endTime - startTime, e);
35            return "fail";
36        }
37        long endTime = System.currentTimeMillis();
38        log.info("{}请求结束: {}", requestId, endTime - startTime);
39        return obj;
40    }
41
42    @Data
43    class DefaultRequest {
44        private String requestId;
45    }
46
47}

log日志拦截的更多相关文章

  1. struts2-权限拦截器、日志拦截器、execAndWait(进度条)拦截器配置

    1.权限拦截器 package login; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.Serv ...

  2. AOP 切面编程------JoinPoint ---- log日志

    AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件 ...

  3. 个人博客开发之blog-api 项目全局日志拦截记录

    前言 大型完善项目中肯定是需要一个全局日志拦截,记录每次接口访问相关信息,包括: 访问ip,访问设备,请求参数,响应结果,响应时间,开始请求时间,访问接口描述,访问的用户,接口地址,请求类型,便于项目 ...

  4. Atitit.log日志技术的最佳实践attilax总结

    Atitit.log日志技术的最佳实践attilax总结 1. 日志的意义与作用1 1.1. 日志系统是一种不可或缺的单元测试,跟踪调试工具1 2. 俩种实现[1]日志系统作为一种服务进程存在 [2] ...

  5. mysql general log日志

    注:应一直出现http://www.cnblogs.com/hwaggLee/p/6030765.html文章中的问题 故mysql general log日志.查看具体是什么命令导致的. 打开 ge ...

  6. 使用触发器实现记录oracle用户登录失败信息到alert.log日志文件

    前面我们说了用oracle自带的审计功能可以实现记录用户登录失败日志到数据表中(链接:http://www.54ok.cn/6778.html).今天我们来分享一下如何把用户登录失败信息记录到aler ...

  7. Junit测试打印详细的log日志,可以看到sql

    Junit测试打印详细的log日志,可以看到sql 在log4j.xml的日志配置文件中,把日志级别从info级别调整到debug级别: <?xml version="1.0" ...

  8. iOS及时log日志查看工具 (iConsole)

    github下载地址:https://github.com/nicklockwood/iConsole 偶然看到的一个iOS及时log日志查看工具,通过该工具,我们可以在任何想看日志的时候,通过手势呼 ...

  9. svn update -r m path 代码还原到某个版本(这样之前的log日志也就没了,也就是清空log日志)

    [root@ok 资料库]# svn log 简历 ------------------------------------------------------------------------ r ...

随机推荐

  1. layer/layui弹出层插件bug

    <button class="layui-btn" lay-submit lay-filter="formDemo" id="layui-btn ...

  2. H5 FileReader读取文件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 怎样在RxJS Observable中使用Async-Await

    怎样在RxJS Observable中使用Async-Await 一般情况下 async-await 和 Observables 并不能“在一起使用”.但RxJS 从一开始就具备与 Promises ...

  4. H3C IGP与EGP

  5. linux scull 中的缺陷

    让我们快速看一段 scull 内存管理代码. 在写逻辑的深处, scull 必须决定它请求的内 存是否已经分配. 处理这个任务的代码是: if (!dptr->data[s_pos]) { dp ...

  6. 机器学习——集成学习之Stacking

    摘自: https://zhuanlan.zhihu.com/p/27689464 Stacking方法是指训练一个模型用于组合其他各个模型.首先我们先训练多个不同的模型,然后把之前训练的各个模型的输 ...

  7. ZR10.1青岛集训三地联考

    ZR10.1青岛集训三地联考 谢谢dijk和smy A 题目大意: 已知斐波那契数列\(f\) 设 \[ F_i = \sum_{i = 0}^nf_if_{n - i} \] 求 \[ \sum_{ ...

  8. CodeForces - 1189 E.Count Pairs (数学)

    You are given a prime number pp, nn integers a1,a2,…,ana1,a2,…,an, and an integer kk. Find the numbe ...

  9. 苹果IOS 证书申请及导出证书文件

    在申请证书之前,前提是,你要注册一个苹果帐号,且交了个人或公司帐号99美元大概人民币600多一年费用申请开发者帐号,审核通过的开发者帐号,个人或公司或企业类型帐号. 如何申请苹果开发者帐号,这里不讲解 ...

  10. 让Word Add-in For MediaWiki支持Word 2013

    1.下载并安装Word Add-in For MediaWiki https://www.microsoft.com/en-us/download/details.aspx?id=12298 2.在“ ...