统一获取请求的地址和参数,打印到日志和控制台中,方便查找错误

本文介绍了一种使用AOP技术在Spring Boot项目中记录HTTP请求和响应的方法。通过定义切面,可以在请求到达控制器之前和之后捕获并记录请求的URL、参数及返回结果,便于调试和监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候我们需要知道前台的请求地址和请求的参数、返回值等信息,来帮助我们解决问题。
下面就介绍一下如何获取请求的参数和返回参数等:

@Aspect
@Component
@Slf4j
public class ConsoleLogAspect {

	//设置切面点(切面地址根据自己的项目填写)
    @Pointcut(value = "(execution(* com.zte.bcp.manage..controller.*.*(..)))")
    public void webLog() {}

	//指定切点前的处理方法
    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) throws Exception {
    	//获取request对象
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        StringBuilder sb = new StringBuilder();
        //拼接请求内容
        sb.append("\n请求路径:" + request.getRequestURL().toString() + "  " + request.getMethod() + "\n");
        //判断请求是什么请求
        if (request.getMethod().equalsIgnoreCase(RequestMethod.GET.name())) {
            Map<String, String[]> parameterMap = request.getParameterMap();
            Map<String, String> paramMap = new HashMap<>();
            parameterMap.forEach((key, value) -> paramMap.put(key, Arrays.stream(value).collect(joining(","))));
            sb.append("请求内容:" + JSON.toJSONString(paramMap));
        } else if (request.getMethod().equalsIgnoreCase(RequestMethod.POST.name())) {
            Object[] args = joinPoint.getArgs();
            StringBuilder stringBuilder = new StringBuilder();
            Arrays.stream(args).forEach(object -> stringBuilder.append(object.toString().replace("=",":")));
            if (stringBuilder.length() == 0){
                stringBuilder.append("{}");
            }
            sb.append("请求内容:" + stringBuilder.toString());
        }
        log.info(sb.toString());
    }
    
	//指定切点前的处理方法
    @AfterReturning(pointcut = "webLog()",returning = "result")
    public void doAfterReturning(Object result) {
        if (ObjectUtils.isEmpty(result)){
            return;
        }
        log.info("\n返回結果:" + JSON.toJSONString(result));
    }
}

这样就可以实现打印请求参数和响应内容了

<think>好的,我需要帮助用户查找在阿里云控制台中如何查看特定项目的某个接口字段的日志。首先,我应该回忆阿里云的相关服务,比如日志服务(SLS)ARMS应用监控。根据用户提供的引用[1],日志服务ARMS都支持标签管理,这可能帮助用户筛选资源。用户的问题是关于查看特定项目的API接口字段的日志,所以可能需要使用日志服务的查询功能。 接下来,我需要整理步骤。首先,用户需要进入日志服务控制台,选择正确的ProjectLogstore,这对应到特定项目。然后,使用查询语句来过滤特定的接口字段。引用[3]中提到使用精确匹配路径,比如在路由配置中使用精确匹配,这可能类比到日志查询中使用精确匹配字段值。例如,在查询语句中,用户可以使用`method: "GET" AND path: "/api/v1/user"`来筛选特定的接口。 另外,引用[3]中的端口映射配置服务来源可能不直接相关,但初始化管理员账号创建服务来源的步骤提示了用户可能需要先确保日志已经被正确收集存储。如果用户没有看到相关日志,可能需要检查日志采集配置,确保目标接口的日志被正确上传到指定的Logstore。 还要考虑用户可能需要使用SQL分析功能来提取特定字段,比如SELECT语句过滤所需字段。同时,设置定时查询或报警规则,如引用[1]中提到的报警规则支持标签,可能帮助用户持续监控特定日志。 最后,需要验证步骤是否正确,比如通过测试数据或示例查询确认结果是否符合预期。如果用户遇到问题,建议检查网络、权限或日志采集配置,这可以引用[2]中的kubectl命令来类比,可能需要查看服务状态或日志收集器是否正常运行。 总结步骤:进入日志服务控制台,选择项目Logstore,输入查询语句过滤接口字段,使用SQL分析,设置定时查询,验证结果,检查配置问题。确保每个步骤清晰,并引用相关的引用内容来支持建议。</think>### 分步解答 1. **登录阿里云控制台并进入日志服务(SLS)** - 访问 [阿里云日志服务控制台](https://sls.console.aliyun.com/),选择目标**项目(Project)**对应的**日志库(Logstore)**[^1]。 2. **通过查询语句筛选特定接口日志** - 在日志查询页面,输入查询语句过滤特定API接口。例如: ```sql # 按接口路径请求方法筛选 method: "GET" AND path: "/api/v1/user" ``` 若需要匹配字段值,可使用`=`或`LIKE`: ```sql # 精确匹配字段值(如status字段为200的日志) status = 200 AND request_time > 1 ``` 3. **按字段提取日志详情** - 使用**SQL模式**分析日志,提取特定字段: ```sql SELECT request_id, user_id, latency FROM log WHERE api_name = "CreateOrder" ``` - 点击“查询/分析”查看结果,并可导出为CSV或生成图表。 4. **设置定时查询或告警规则(可选)** - 在“告警”模块中创建规则,监控特定接口的异常(如错误率超过阈值)[^1]。 5. **验证日志采集配置** - 如果未查到日志,需确认日志采集是否覆盖目标接口,检查Logstore的索引配置是否包含相关字段(如`api_name`、`status`等)[^3]。 --- ### 注意事项 - **权限问题**:确保账号有`LogStoreRead`权限,否则无法查看日志。 - **数据延迟**:实时日志可能存在1~2分钟延迟。 - **高级筛选**:复杂场景可结合`JOIN`或`子查询`关联多张日志表。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值