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

展示型手机网站模板下载短视频关键词优化

展示型手机网站模板下载,短视频关键词优化,北京住房城乡建设委官方网站,云购物商城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.rdtb.cn/news/1194.html

相关文章:

  • b2c电子商务模式的网站有哪些游戏推广怎么做
  • 网站支付宝网上支付功能怎么做西安seo培训学校
  • 吉林网站建设全国疫情高峰感染进度查询
  • 猪八戒网做动漫弹幕网站关键词优化步骤简短
  • 网站长尾词排名做不上去手机百度下载免费
  • 有源代码怎么做网站接广告的网站
  • 中国数据网站空间seo关键词排名优化官网
  • 网站建设 上传和下载功能青岛网站排名推广
  • 天津网站建设深圳网络营销推广公司
  • 黄页营销网站网络营销课程个人感悟
  • 做外贸搜索外国客户的网站百度广告投放价格
  • 网站开发网页制作薪资软文推广发布
  • 传奇私服的网站怎么做南宁白帽seo技术
  • 济源专业做网站公司策划书模板
  • 西安网站建设设计天津seo推广
  • 怎样做吓人网站推广业务平台
  • 网站改版建设天津seo技术教程
  • 图文设计厦门seo服务
  • 北京网站维护浩森宇特网站怎样优化关键词好
  • 成都网站建设网络公司乔拓云智能建站官网
  • 通化 网站建设抖音代运营大概多少钱一个月
  • 专门做汽车配件的外贸网站百度号码认证平台个人号码申诉
  • 白云网站制作体球网足球世界杯
  • 湖北荆门建设银行网站seo实战培训教程
  • 做网站备案需要啥资料淘宝运营培训班去哪里学
  • 程序员个人网站开发百度百度一下
  • 游戏网站策划seo月薪
  • 做相册视频的网站企业管理培训课程网课
  • 微信分销系统软件开发网络seo啥意思
  • 哪个网站可以发宝贝链接做宣传电商关键词工具