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

网站的步骤wordpress插件存放地址

网站的步骤,wordpress插件存放地址,百色seo关键词优化公司,电商平台网站运营方案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/175573/

相关文章:

  • 可以自己做视频网站吗宁波网站建设明细报价
  • 成都手机网站开发wordpress 发布文章主动推送百度
  • 律师网站模版网络运维是干什么的
  • 营销型网站建设与网盟网站开发与运营案例教程
  • 微信 网站设计模板集团网站建设案例与网站作用
  • 网站导航界面深圳seo秘籍
  • win10虚拟目录 做网站北京成交型网站建设价格
  • 房屋中介网站模板网站建设项目的结论
  • 合肥网站制作套餐识万物扫一扫
  • 行业门户网站建设方案书玄武区网站建设
  • 哪做网站比较便宜泰坦科技网站建设
  • 网站二级目录 修改路径ui设计软件培训学校
  • 马鞍山住房和城乡建设局网站seo在线优化工具 si
  • 兰州网站建设推荐q479185700上快深圳企业网站模板
  • 冀州做网站的公司安卓市场应用商店下载
  • 注册网站填写不了地区常州网站制作工具
  • 深圳建设网站公网站备案后 还是需要再备案吗
  • 网站建设管理 自查 报告嵌入式培训机构排名前十
  • 厦门网站建设厦门seowordpress中php代码只能一行一行写
  • 做的怎样 英文网站小学生ppt模板免费下载
  • 淮安网站定制做馋嘴小栈官方网站
  • wordpress显示上传目录推广优化师
  • 网站建设的小结分类导航wordpress
  • 做户外的网站企业网站模板html下载
  • 做机械设备内销网站有哪些百度站长工具后台
  • 福彩网网站建设方案强的网站建设公
  • 登录浙江省建设信息港合肥seo网站推广费用
  • dtc建站服务服务器怎样建设网站
  • 黄冈商城网站建设如何做视频网站不侵权
  • 外包公司拖欠工资怎么办威海网站seo