AOP日志 记录方法参数名及对应值(包括对象和基本类型)
来源:互联网 发布:包月无限流量软件 编辑:程序博客网 时间:2024/06/05 22:52
最近在优化日志打印内容,能够记录方法参数名及对应值,对现有贴子进行代码优化,贴上代码片段。
package com.zjy.aop;import java.lang.reflect.Field;import org.apache.log4j.Logger;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.aspectj.lang.reflect.MethodSignature;import org.springframework.stereotype.Component;import com.google.gson.Gson;import com.google.gson.GsonBuilder;/** * * INTRO : AOP日志---记录方法参数名及对应值(包括对象和基本类型) * * @author helloJay * @since 2017年8月1日 */@Component@Aspectpublic class CallController { Logger logger = Logger.getLogger(CallController.class.getName()); public static Gson gson = new GsonBuilder().serializeNulls().create(); private static String[] types = { "java.lang.Integer", "java.lang.Double", "java.lang.Float", "java.lang.Long", "java.lang.Short", "java.lang.Byte", "java.lang.Boolean", "java.lang.Char", "java.lang.String", "int", "double", "long", "short", "byte", "boolean", "char", "float" }; @Pointcut("execution(* com.zjy.controller.*.*(..))") public void methodCachePointcut() { } @Before("methodCachePointcut()") public void doBefore(JoinPoint joinPoint) throws Exception { // 此为代码片段 String params = bulidParams(joinPoint) + " "; // ... logger.error(params); } /** * 获取方法参数名及对应值 */ private String bulidParams(JoinPoint joinPoint) throws Exception { String[] paramNames = getParamNames(joinPoint); Object[] args = joinPoint.getArgs(); StringBuilder sb = new StringBuilder(); sb.append("("); for (int k = 0; k < args.length; k++) { boolean clazzFlag = true; Object arg = args[k]; if (arg == null) { continue; } sb.append(paramNames[k]); String typeName = arg.getClass().getTypeName(); for (String type : types) { if (type.equals(typeName)) { clazzFlag = false; sb.append("=").append(argValue(arg)).append(","); } } if (clazzFlag) sb.append(getFieldsValue(arg)); } sb.append(")"); return sb.toString(); } private String[] getParamNames(JoinPoint joinPoint) { return ((MethodSignature) joinPoint.getSignature()).getParameterNames(); } private static String argValue(Object arg) { String argStr = gson.toJson(arg); return argStr.length() > 256 ? argStr.subSequence(0, 256) + "..." : argStr; } /** * 获取对象中的参数名及对应参数值 */ private static String getFieldsValue(Object obj) throws Exception { Field[] fields = obj.getClass().getDeclaredFields(); StringBuilder sb = new StringBuilder(); for (Field field : fields) { field.setAccessible(true); try { field.get(null);// 只能获取静态常量 } catch (NullPointerException e) { Object objArg = field.get(obj); if (objArg == null) { continue; } for (String type : types) { if (field.getType().getName().equals(type)) { sb.append(field.getName()).append("=").append(argValue(objArg)).append(","); } } } } return sb.toString(); }}
引入jar包
<!-- gson --><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.6.1</version></dependency><!-- AspectJ --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>${org.aspectj-version}</version></dependency><!-- log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>打印内容
(personGuid="EB7E0F1DDADE48F9BB75957A6780A608",deviceKey="1324568794658",taskId="80F82B6A6ED44D88B091CE98D6B8D48A",state=4,)
转载自:http://blog.csdn.net/paincupid/article/details/51176149
阅读全文
1 0
- AOP日志 记录方法参数名及对应值(包括对象和基本类型)
- AOP日志,记录调用类、方法、方法参数名称、方法参数值(包括对象和基本类型)
- JavaScript:遍历JavaScript对象的参数名和对应值
- springboot 中使用 AOP 打印 类名、方法名、方法参数名称和方法参数值
- java基本类型、对象销毁和方法参数
- Unity的AOP拦载,获取方法名,参数值,返回类型
- SpringMVC参数校验,包括JavaBean和基本类型的校验
- [反射初探]根据反射获取类中参数类型及参数名和参数值
- SpringMVC参数校验,包括JavaBean和基本类型的校验(转载)
- Java 编程下通过反射获取一个类中的方法名和对应参数名
- Java 编程下通过反射获取一个类中的方法名和对应参数名
- Java 编程下通过反射获取一个类中的方法名和对应参数名
- 反射获取方法名及参数名,反射获取参数作为对象使用
- json中的值类型及输出对象的所有名称和对应的值
- spring aop获取目标对象的方法对象(包括方法上的注解)
- spring aop获取目标对象的方法对象(包括方法上的注解)
- 方法参数是基本类型和引用类型的区别
- spring aop---获取代理类所传入的参数及方法名等
- 新手学xingo golang服务器之-修改xingo 支持字符协议(一)
- TensorFlow关于 SSE AVX的Warning问题
- 修改Tomcat默认访问根目录
- 负值之美:负margin在页面布局中的应用
- 机器学习笔记:SVM
- AOP日志 记录方法参数名及对应值(包括对象和基本类型)
- PowerDesigner提示错误Non SQL Error : Could not load class com.mysql.jdbc.Driver
- JAVA注解的使用
- ajax 个人学习小记
- 下载付费音乐
- Nginx--官网中文翻译(中英文对比)--6-登陆系统日志Logging to syslog
- Oracle中TO_DATE用法
- 我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
- Echarts中legend图形和字体颜色改变