前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringMVC 请求参数,返回值格式打印,遍于开发调试

SpringMVC 请求参数,返回值格式打印,遍于开发调试

作者头像
用户2603479
发布2018-08-15 16:42:34
5910
发布2018-08-15 16:42:34
举报
文章被收录于专栏:JAVA技术站JAVA技术站

一、日志切面实现如下

    Spring的切面配置网上一大堆就不解释了,直接上代码,如下

package com.yudian.mall.common.log;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.yudian.mall.common.Environment;

@Aspect
@Component
public class GloberLogInterceptor {

	@Value("${environment}")
	private String environment;

	@Resource
	private HttpServletRequest request;

	public Log log = LogFactory.getLog(GloberLogInterceptor.class);

	@Pointcut("execution(* com.yudian.mall.controller*..*(..))")
	public void log() {
		log.info(request.getParameterMap());
	}

	@Before("log()")
	public void before(JoinPoint joinPoint) {
		if (StringUtils.equals(environment, Environment.DEV)) {
			StringBuilder sb = new StringBuilder("\nSpringMVC action report -------- ")
					.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))
					.append(" ------------------------------\n");

			sb.append("Controller  : ").append(joinPoint.getTarget().getClass().getName()).append(".(")
					.append(joinPoint.getTarget().getClass().getSimpleName()).append(".java:1)");
			sb.append("\nMethod      : ").append(joinPoint.getSignature().getName()).append("\n");

			String uri = request.getRequestURI();
			if (uri != null) {
				sb.append("url         : ").append(uri).append("\n");
			}

			Enumeration<String> e = request.getParameterNames();
			if (e.hasMoreElements()) {
				sb.append("Parameter   : ");
				while (e.hasMoreElements()) {
					String name = e.nextElement();
					String[] values = request.getParameterValues(name);
					if (values.length == 1) {
						sb.append(name).append("=").append(values[0]);
					} else {
						sb.append(name).append("[]={");
						for (int i = 0; i < values.length; i++) {
							if (i > 0)
								sb.append(",");
							sb.append(values[i]);
						}
						sb.append("}");
					}
					sb.append("  ");
				}
				sb.append("\n");
			}
			sb.append("--------------------------------------------------------------------------------\n");
			System.out.print(sb.toString());
		} else {
			StringBuilder sb = new StringBuilder();

			sb.append(request.getRequestURI()).append(", ");
			sb.append("IP: " + request.getRemoteAddr()).append(", [");

			Map<String, String[]> parameters = request.getParameterMap();

			for (Map.Entry<String, String[]> entity : parameters.entrySet()) {

				sb.append(String.format("%s = %s, ", entity.getKey(), StringUtils.join(entity.getValue(), ',')));
			}

			sb.delete(sb.length() - 2, sb.length()).append("]");

			log.info(sb.toString());
		}
	}

	@AfterReturning(pointcut = "log()", returning = "returnValue")
	public void afterReturning(JoinPoint joinPoint, Object returnValue) {
		log.info("return value is "+returnValue);
	}

}

执行效果如下

GloberLogInterceptor - return value is /login/login

SpringMVC action report -------- 2016-11-10 11:33:48 ------------------------------
Controller  : com.yudian.mall.controller.LoginController.(LoginController.java:1)
Method      : checkLogin
url         : /login/checkLogin
Parameter   : userName=admin  password=123456  
--------------------------------------------------------------------------------
AbstractPoolBackedDataSource - Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 5, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 1hge2ye9kl640vhtdbppg|3cb3ada, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge2ye9kl640vhtdbppg|3cb3ada, idleConnectionTestPeriod -> 60, initialPoolSize -> 20, jdbcUrl -> jdbc:mysql://localhost:3306/mall?useUnicode=true&amp;characterEncoding=utf-8, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 600, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 100, maxStatements -> 5, maxStatementsPerConnection -> 0, minPoolSize -> 10, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]
LoginController -  user  admin login success
GloberLogInterceptor - return value is {"code":"1","message":"登录成功"}

SpringMVC action report -------- 2016-11-10 11:33:48 ------------------------------
Controller  : com.yudian.mall.controller.IndexController.(IndexController.java:1)
Method      : index
url         : /
--------------------------------------------------------------------------------
GloberLogInterceptor - return value is index

SpringMVC action report -------- 2016-11-10 11:33:49 ------------------------------
Controller  : com.yudian.mall.controller.user.PermissionController.(PermissionController.java:1)
Method      : findMenu
url         : /permission/get-menu
Parameter   : module=sys  
--------------------------------------------------------------------------------
GloberLogInterceptor - return value is {"code":"成功获取菜单","message":"1","data":[{"id":1,"parentId":0,"checked":false,"children":[{"id":2,"parentId":1,"url":"/admin","checked":false,"children":[],"text":"用户管理"},{"id":3,"parentId":1,"url":"/department","checked":false,"children":[],"text":"组织管理"},{"id":4,"parentId":1,"url":"/role","checked":false,"children":[],"text":"角色管理"},{"id":5,"parentId":1,"url":"/permission","checked":false,"children":[],"text":"权限菜单"}],"text":"系统配置"}]}

是不是很直观,再也不问前端,你传了参数没有,哈哈

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016/11/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档