1
1
package site .yuanshen .genshin .core .aspect ;
2
2
3
3
import com .alibaba .fastjson2 .JSON ;
4
+ import com .alibaba .fastjson2 .JSONWriter ;
4
5
import lombok .extern .slf4j .Slf4j ;
5
6
import org .aspectj .lang .JoinPoint ;
6
7
import org .aspectj .lang .ProceedingJoinPoint ;
9
10
import org .springframework .util .StopWatch ;
10
11
import org .springframework .web .context .request .RequestContextHolder ;
11
12
import org .springframework .web .context .request .ServletRequestAttributes ;
13
+ import org .springframework .web .multipart .MultipartFile ;
12
14
13
15
import javax .servlet .http .HttpServletRequest ;
16
+ import java .util .ArrayList ;
17
+ import java .util .List ;
14
18
15
19
/**
16
20
* @author kraken
@@ -24,6 +28,30 @@ public class WebLogAspect {
24
28
private static final String LINE_SEPARATOR = System .lineSeparator ();
25
29
public static final ThreadLocal <StopWatch > STOP_WATCH_THREAD_LOCAL = new ThreadLocal <>();
26
30
31
+ public static final JSONWriter .Feature [] defaultWriteFeatures = new JSONWriter .Feature []{
32
+ JSONWriter .Feature .BrowserCompatible ,
33
+ JSONWriter .Feature .WriteEnumUsingToString ,
34
+ JSONWriter .Feature .WriteBigDecimalAsPlain ,
35
+ JSONWriter .Feature .WriteEnumUsingToString ,
36
+ JSONWriter .Feature .WriteNonStringKeyAsString
37
+ };
38
+
39
+ private Object [] sanitizeArgs (Object [] args ) {
40
+ final Object [] sanitizedArgs = List .of (args )
41
+ .parallelStream ()
42
+ .map (arg -> {
43
+ if (arg == null ) {
44
+ return null ;
45
+ } else if (arg instanceof MultipartFile ) {
46
+ return "@[Instance MultipartFile]" ;
47
+ } else {
48
+ return arg ;
49
+ }
50
+ })
51
+ .toArray ();
52
+ return sanitizedArgs ;
53
+ }
54
+
27
55
/**
28
56
* 以 controller 包下定义的所有请求为切入点
29
57
*/
@@ -64,7 +92,7 @@ public void doBefore(JoinPoint joinPoint) {
64
92
+ request .getRemoteAddr ()
65
93
+ LINE_SEPARATOR
66
94
+ "请求入参 : "
67
- + JSON .toJSONString (joinPoint .getArgs ())
95
+ + JSON .toJSONString (sanitizeArgs ( joinPoint .getArgs ()), defaultWriteFeatures )
68
96
+ LINE_SEPARATOR );
69
97
}
70
98
@@ -101,7 +129,7 @@ public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable
101
129
throw e ;
102
130
} finally {
103
131
STOP_WATCH_THREAD_LOCAL .get ().stop ();
104
- String s = JSON .toJSONString (result );
132
+ String s = JSON .toJSONString (result , defaultWriteFeatures );
105
133
log .info (
106
134
LINE_SEPARATOR
107
135
+ "URL : "
@@ -124,4 +152,4 @@ public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable
124
152
STOP_WATCH_THREAD_LOCAL .remove ();
125
153
}
126
154
}
127
- }
155
+ }
0 commit comments