<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
上一章Spring boot2.0 實現紀錄檔整合的方法(2)主要講解了將紀錄檔資訊根據類別輸出到不同的檔案中,實際開發中我們需要通過紀錄檔來監控使用者的操作行為、請求的耗時情況,針對耗時久的請求進行效能分析,提升系統效能。
採用的Spring Aop切面技術來實現控使用者的操作行為、請求的耗時情況。
@Target({ ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface LogAnnotation { // 模組 String model() default ""; // 功能 String func() default ""; //描述 String desc() default ""; }
@Aspect @Component public class LogAspect { //請求監控紀錄檔,輸出到不同紀錄檔檔案 public static Log logger = LogManager.getLogger("request-access"); /** * 定義切面 */ @Pointcut("@annotation(com.test.aspect.LogAnnotation)") private void logPoinCut() { } /** * * @param joinPoint */ @Before(value = "logPoinCut()") public void doBefore(JoinPoint joinPoint) { String requestId =TraceIdUtil.getTraceId(); logger.info("Start invoke requestID:[{}]",requestId); } @Around(value = "logPoinCut()") public Object doAround(ProceedingJoinPoint jp) throws Throwable { String requestId =TraceIdUtil.getTraceId(); logger.info("Enter request start requestId :[{}]",requestId); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder .getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); MethodSignature signature = (MethodSignature) jp.getSignature(); Method method = signature.getMethod(); long startTime= System.currentTimeMillis(); OperationLog operationLog = new OperationLog(); LogAnnotation logAnnotation = method.getAnnotation(LogAnnotation.class); if (logAnnotation != null) { String model = logAnnotation.model(); String func = logAnnotation.func(); String desc = logAnnotation.desc(); operationLog.setModel(model); operationLog.setFunc(func); operationLog.setDesc(desc); } String className = jp.getTarget().getClass().getName(); String methodName = jp.getSignature().getName(); String uri = request.getRequestURI(); String ip = IpUtil.getIpAddr(request); operationLog.setClassName(className); operationLog.setMethodName(methodName); operationLog.setIp(ip); operationLog.setUri(uri); StringBuilder param = new StringBuilder(); Object[] args = jp.getArgs(); Object arg = null; for (int i = 0, j = args.length; i < j; i++) { arg = args[i]; param.append(" ") .append(arg == null ? null : args[i].toString()); if (i != (j - 1)) { param.append(",").append("n"); } } operationLog.setParam(param.toString()); operationLog.setCreateDate(new Date()); long endTime=System.currentTimeMillis()-startTime; //可以通過設定設定異常呼叫請求時間 long costTime=3; operationLog.setCostTime(endTime); String logStr = JSON.toJSONString(operationLog); //將異常請求資料插入資料庫 if(endTime>costTime){ //saveOpetionLog(operationLog); } logger.info("invoke finish message:{}",logStr); Object obj = jp.proceed(); return obj; } /** * 方法之後呼叫 * @param joinPoint * @param returnValue 方法返回值 */ @AfterReturning(pointcut = "logPoinCut()") public void doAfterReturning(JoinPoint joinPoint) { String requestId=TraceIdUtil.getTraceId(); logger.info("End invoke request ID [{}]",requestId); } }
@LogAnnotation(model="使用者管理",func="查詢使用者資訊",desc="根據使用者名稱稱") @GetMapping("getUserByName") public Result getUserByName(@RequestParam String name) { logger.info("getUserByName paramter name:[{}]",name); return Result.success(userService.getUserByName(name)); }
{ "className": "com.test.controller.UserController", "costTime": 19, "createDate": "2022/03/11 15:20:30", "createUser": "xx", "ip": "172.18.188.111", "methodName": "getUserByName", "param": " zhangsan", "uri": "/user/getUserByName", "model":"使用者管理", "func":"查詢使用者資訊", "desc":"根據使用者名稱稱", "version": 0 }
對於一些敏感的資訊需要進行加密處理。針對異常的請求進行分析和效能優化。
上述紀錄檔資訊雖然記錄的比較詳細,但是缺少了請求的來源,尤其是跨服務之間的呼叫,則無法進行追蹤。鏈路追蹤可以採用Spring Boot +logbck+MDC來實現。
到此這篇關於Spring boot2.0 實現紀錄檔整合的方法(3)的文章就介紹到這了,更多相關Spring boot 紀錄檔整合內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45