34
34
import org .springframework .lang .Nullable ;
35
35
36
36
/**
37
- * A simple logger advisor that logs the request and response messages.
37
+ * A configurable logger advisor that logs the request and response messages at configurable log levels .
38
38
*
39
39
* @author Christian Tzolov
40
+ * @author Enhanced by doubao
40
41
*/
41
42
public class SimpleLoggerAdvisor implements CallAdvisor , StreamAdvisor {
42
43
43
44
public static final Function <ChatClientRequest , String > DEFAULT_REQUEST_TO_STRING = ChatClientRequest ::toString ;
44
-
45
45
public static final Function <ChatResponse , String > DEFAULT_RESPONSE_TO_STRING = ModelOptionsUtils ::toJsonStringPrettyPrinter ;
46
46
47
47
private static final Logger logger = LoggerFactory .getLogger (SimpleLoggerAdvisor .class );
48
48
49
49
private final Function <ChatClientRequest , String > requestToString ;
50
-
51
50
private final Function <ChatResponse , String > responseToString ;
52
-
53
51
private final int order ;
52
+ private final LogLevel requestLogLevel ;
53
+ private final LogLevel responseLogLevel ;
54
54
55
55
public SimpleLoggerAdvisor () {
56
- this (DEFAULT_REQUEST_TO_STRING , DEFAULT_RESPONSE_TO_STRING , 0 );
56
+ this (DEFAULT_REQUEST_TO_STRING , DEFAULT_RESPONSE_TO_STRING , 0 , LogLevel . DEBUG , LogLevel . DEBUG );
57
57
}
58
58
59
59
public SimpleLoggerAdvisor (int order ) {
60
- this (DEFAULT_REQUEST_TO_STRING , DEFAULT_RESPONSE_TO_STRING , order );
60
+ this (DEFAULT_REQUEST_TO_STRING , DEFAULT_RESPONSE_TO_STRING , order , LogLevel . DEBUG , LogLevel . DEBUG );
61
61
}
62
62
63
63
public SimpleLoggerAdvisor (@ Nullable Function <ChatClientRequest , String > requestToString ,
64
- @ Nullable Function <ChatResponse , String > responseToString , int order ) {
64
+ @ Nullable Function <ChatResponse , String > responseToString ,
65
+ int order ,
66
+ LogLevel requestLogLevel ,
67
+ LogLevel responseLogLevel ) {
65
68
this .requestToString = requestToString != null ? requestToString : DEFAULT_REQUEST_TO_STRING ;
66
69
this .responseToString = responseToString != null ? responseToString : DEFAULT_RESPONSE_TO_STRING ;
67
70
this .order = order ;
71
+ this .requestLogLevel = requestLogLevel ;
72
+ this .responseLogLevel = responseLogLevel ;
68
73
}
69
74
70
75
@ Override
@@ -80,7 +85,7 @@ public ChatClientResponse adviseCall(ChatClientRequest chatClientRequest, CallAd
80
85
81
86
@ Override
82
87
public Flux <ChatClientResponse > adviseStream (ChatClientRequest chatClientRequest ,
83
- StreamAdvisorChain streamAdvisorChain ) {
88
+ StreamAdvisorChain streamAdvisorChain ) {
84
89
logRequest (chatClientRequest );
85
90
86
91
Flux <ChatClientResponse > chatClientResponses = streamAdvisorChain .nextStream (chatClientRequest );
@@ -89,11 +94,41 @@ public Flux<ChatClientResponse> adviseStream(ChatClientRequest chatClientRequest
89
94
}
90
95
91
96
private void logRequest (ChatClientRequest request ) {
92
- logger . debug ( "request: {}" , this .requestToString .apply (request ));
97
+ logMessage ( requestLogLevel , "request: {}" , this .requestToString .apply (request ));
93
98
}
94
99
95
100
private void logResponse (ChatClientResponse chatClientResponse ) {
96
- logger .debug ("response: {}" , this .responseToString .apply (chatClientResponse .chatResponse ()));
101
+ logMessage (responseLogLevel , "response: {}" , this .responseToString .apply (chatClientResponse .chatResponse ()));
102
+ }
103
+
104
+ private void logMessage (LogLevel level , String format , Object arg ) {
105
+ switch (level ) {
106
+ case TRACE :
107
+ if (logger .isTraceEnabled ()) {
108
+ logger .trace (format , arg );
109
+ }
110
+ break ;
111
+ case DEBUG :
112
+ if (logger .isDebugEnabled ()) {
113
+ logger .debug (format , arg );
114
+ }
115
+ break ;
116
+ case INFO :
117
+ if (logger .isInfoEnabled ()) {
118
+ logger .info (format , arg );
119
+ }
120
+ break ;
121
+ case WARN :
122
+ if (logger .isWarnEnabled ()) {
123
+ logger .warn (format , arg );
124
+ }
125
+ break ;
126
+ case ERROR :
127
+ if (logger .isErrorEnabled ()) {
128
+ logger .error (format , arg );
129
+ }
130
+ break ;
131
+ }
97
132
}
98
133
99
134
@ Override
@@ -115,13 +150,17 @@ public static Builder builder() {
115
150
return new Builder ();
116
151
}
117
152
153
+ public enum LogLevel {
154
+ TRACE , DEBUG , INFO , WARN , ERROR
155
+ }
156
+
118
157
public static final class Builder {
119
158
120
159
private Function <ChatClientRequest , String > requestToString ;
121
-
122
160
private Function <ChatResponse , String > responseToString ;
123
-
124
161
private int order = 0 ;
162
+ private LogLevel requestLogLevel = LogLevel .DEBUG ;
163
+ private LogLevel responseLogLevel = LogLevel .DEBUG ;
125
164
126
165
private Builder () {
127
166
}
@@ -141,10 +180,30 @@ public Builder order(int order) {
141
180
return this ;
142
181
}
143
182
144
- public SimpleLoggerAdvisor build () {
145
- return new SimpleLoggerAdvisor (this .requestToString , this .responseToString , this .order );
183
+ public Builder requestLogLevel (LogLevel logLevel ) {
184
+ this .requestLogLevel = logLevel ;
185
+ return this ;
146
186
}
147
187
148
- }
188
+ public Builder responseLogLevel (LogLevel logLevel ) {
189
+ this .responseLogLevel = logLevel ;
190
+ return this ;
191
+ }
192
+
193
+ public Builder logLevel (LogLevel logLevel ) {
194
+ this .requestLogLevel = logLevel ;
195
+ this .responseLogLevel = logLevel ;
196
+ return this ;
197
+ }
149
198
199
+ public SimpleLoggerAdvisor build () {
200
+ return new SimpleLoggerAdvisor (
201
+ this .requestToString ,
202
+ this .responseToString ,
203
+ this .order ,
204
+ this .requestLogLevel ,
205
+ this .responseLogLevel
206
+ );
207
+ }
208
+ }
150
209
}
0 commit comments