idea打印动态参数日志

文章目录
  1. 1. 场景
  2. 2. 方案
  3. 3. 步骤
    1. 3.1. 步骤1
    2. 3.2. 步骤2
    3. 3.3. 步骤3
  4. 4. 参考

场景

1
2
3
4
5
6
7
//比如 有个test方法: 
void test (User user, String orderId){
...
}

//想要生成的java代码如下
log.info("test.params... user:{}, orderId:{}", JSON.toJSONString(user), JSON.toJSONString(orderId));

方案

groovy + idea的内置表达式

因为内置表达式 methodParameters() 输出的是字符串 [user, orderId] 这种格式,所以还需要groovy脚本来达到想要的效果

步骤

步骤1

添加模板组, 模板, 设置模板文本

image-20220825160223084

template text格式

1
log.debug("$className$#$methodName$ $info$", $param$);

步骤2

添加自定义变量

image-20220825160310109

info变量:

1
2
3
4
5
6
7
groovyScript( 
"def result='';
def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList();
for(i = 0; i < params.size(); i++) {
result+= params[i] + ((i < params.size() - 1) ? ':{}, ' : ':{}')
};
return result" , methodParameters())

param 变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

groovyScript("
def result='';
def types = 'String,int,Integer,long,Long,float,Float,double,Double,byte,Byte,short,Short,char,Char,boolean,Boolean';
def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]','').split(',').toList();
def paramTypes=\"${_2}\".replaceAll('[\\\\[|\\\\]|\\\\s]','').split(',').toList();
for(i = 0; i < params.size(); i++) {
if(types.contains(paramTypes[i].replace('java.lang.',''))){
result+=params[i] + ((i < params.size() - 1) ? ', ' : '');
}else{
result+='JSON.toJSONString(' + params[i] + ((i < params.size() - 1) ? '), ' : ')');
}
};
return result;
" , methodParameters(), methodParameterTypes())

步骤3

测试输入 ld

image-20220825160534877

参考

https://blog.csdn.net/zx1323/article/details/122842934

https://www.jetbrains.com/help/idea/template-variables.html