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

中国企业网站建设现状c mvc 网站开发进阶之路

中国企业网站建设现状,c mvc 网站开发进阶之路,iis7建网站,微信安装Spring AOP 中记录日志 使用 AOP 和 Spring 提供的 RequestContextHolder 在通知中记录 HTTP 请求相关日志。以下是进阶添加日志功能的完整例子和说明。 完整示例 1. 切面类实现 Aspect Component public class LogAspect {Around("annotation(log)") // 拦截所有…

Spring AOP 中记录日志

使用 AOP 和 Spring 提供的 RequestContextHolder 在通知中记录 HTTP 请求相关日志。以下是进阶添加日志功能的完整例子和说明。


完整示例

1. 切面类实现

@Aspect
@Component
public class LogAspect {@Around("@annotation(log)") // 拦截所有标注 @Log 的方法public Object logExecution(ProceedingJoinPoint joinPoint, Log log) throws Throwable {// 获取 HttpServletRequest 对象ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();// 提取请求信息String url = request.getRequestURL().toString();String method = request.getMethod();String ip = request.getRemoteAddr();String params = request.getQueryString();// 方法名和参数String methodName = joinPoint.getSignature().getName();Object[] args = joinPoint.getArgs();// 记录日志 - 方法执行前System.out.println("请求 URL: " + url);System.out.println("HTTP 方法: " + method);System.out.println("请求 IP: " + ip);System.out.println("请求参数: " + params);System.out.println("方法名称: " + methodName);System.out.println("方法参数: " + Arrays.toString(args));long startTime = System.currentTimeMillis();// 执行目标方法Object result;try {result = joinPoint.proceed(); // 执行被拦截的方法} catch (Throwable ex) {// 异常处理System.err.println("方法执行异常: " + methodName + ", 异常信息: " + ex.getMessage());throw ex;}long timeTaken = System.currentTimeMillis() - startTime;// 记录日志 - 方法执行后System.out.println("方法执行完成: " + methodName + ", 返回值: " + result + ", 耗时: " + timeTaken + "ms");return result; // 返回目标方法的执行结果}
}

2. 自定义注解

在需要记录日志的方法上标注自定义注解 @Log:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {String value() default "";
}

3. 控制器示例

在控制器方法上使用 @Log 注解:

@RestController
@RequestMapping("/api")
public class TestController {@GetMapping("/test")@Log("测试日志记录")public String testLog(@RequestParam String input) {if ("error".equals(input)) {throw new RuntimeException("模拟异常");}return "Hello, " + input;}
}

日志输出示例

正常请求

访问 http://localhost:8080/api/test?input=world ,记录如下:

请求 URL: http://localhost:8080/api/test
HTTP 方法: GET
请求 IP: 127.0.0.1
请求参数: input=world
方法名称: testLog
方法参数: [world]
方法执行完成: testLog, 返回值: Hello, world, 耗时: 10ms

异常请求

访问 http://localhost:8080/api/test?input=error ,记录如下:

请求 URL: http://localhost:8080/api/test
HTTP 方法: GET
请求 IP: 127.0.0.1
请求参数: input=error
方法名称: testLog
方法参数: [error]
方法执行异常: testLog, 异常信息: 模拟异常

关键点解析

1. 为什么使用 RequestContextHolder?

  • HttpServletRequest 是与线程绑定的,通过 RequestContextHolder 可以方便地在 AOP 切面中获取当前请求的 HttpServletRequest 对象。

2. 日志内容可记录什么?

  • 请求的 URL (request.getRequestURL());
  • HTTP 方法 (request.getMethod());
  • 客户端 IP 地址 (request.getRemoteAddr());
  • 请求参数 (request.getQueryString());
  • 被拦截方法的名称和参数 (joinPoint.getSignature()joinPoint.getArgs());
  • 方法执行耗时。

3. 异常处理

  • catch 块中记录方法执行时报出的异常信息,以便后续排查问题。

总结

  • 通过 AOP 和 RequestContextHolder ,在通知中进行统一的日志记录,便于跟踪和排查 HTTP 请求相关的信息。
  • @Around 通知允许在方法执行前后和异常情况下插入日志逻辑,适用于统一的日志记录场景。
http://www.yayakq.cn/news/701831/

相关文章:

  • 建站资源免费企业网站规划方案
  • 宿迁做网站哪家好哈尔滨优质的建站销售价格
  • 苏州网站建设空间网站制作大概多少钱
  • 用了siteapp是不是手机访问网站就变成siteapp的内容了网页制作接单
  • 客栈网站建设代码ps做好的网站如何做链接
  • 一般企业网站3年多少钱如何引用网站图片
  • icp网站信息php 网站301
  • 企业网站设计图片wordpress仿站博客视频
  • 免费网站排名大全seo团队管理系统
  • 2017网站开发语言排名实用网站建设知识点
  • 网站建设实训教程深圳专业网站公司
  • 做游戏难吗比做网站中山中小企业网站制作
  • 南昌知名网站建设公司为该网站做自适应
  • 龙岩网站建设加盟做网站本溪
  • wordpress经典主题选择小时seo
  • 东莞企业网站搭建制作中国网建
  • 购物网站的开发网站建设是什么?
  • 深圳网站建设大全phpwind 做企业网站
  • 莱芜一中谭苗苗事件关键词seo深圳
  • 制作网站网页设计wordpress登陆后台
  • 商务平台网站建设合同数据做图网站
  • 网站设计软件有哪些做网站还挣钱吗
  • 新建设电影院 网站电子商务主要学什么适合女生吗
  • 正规建网站公司海口专业网站建设公司
  • qq安全中心信任网站湖南长沙网站建设公司电话
  • 那个网站做的刀比较好西安建设局网站小孩把
  • 比较好的做淘客网站这个网站最近运转怎么样?安全性怎么样? 另外建设银行的网银能在这里存取款吗?
  • 地图定位网站开发有关做橡胶品的网站
  • 郑州做公司网站的公司aspnet网站开发源码
  • 潍坊企业网站模板建站商城源码开源