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