Skip to content

Commit 352d98a

Browse files
committed
feat(SimpleLoggerAdvisor): Add log level configuration function
- Add requestLogLevel and responsiveLogLevel properties in SimpleLoggerAdvisor - Add logLevel enumeration class for configuring log levels - Modify the logRequest and logResponse methods to support adjusting log levels according to configuration - Add a method to set log levels in the Builder class
1 parent cd0cc46 commit 352d98a

File tree

1 file changed

+74
-15
lines changed

1 file changed

+74
-15
lines changed

spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/SimpleLoggerAdvisor.java

Lines changed: 74 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,37 +34,42 @@
3434
import org.springframework.lang.Nullable;
3535

3636
/**
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.
3838
*
3939
* @author Christian Tzolov
40+
* @author Enhanced by doubao
4041
*/
4142
public class SimpleLoggerAdvisor implements CallAdvisor, StreamAdvisor {
4243

4344
public static final Function<ChatClientRequest, String> DEFAULT_REQUEST_TO_STRING = ChatClientRequest::toString;
44-
4545
public static final Function<ChatResponse, String> DEFAULT_RESPONSE_TO_STRING = ModelOptionsUtils::toJsonStringPrettyPrinter;
4646

4747
private static final Logger logger = LoggerFactory.getLogger(SimpleLoggerAdvisor.class);
4848

4949
private final Function<ChatClientRequest, String> requestToString;
50-
5150
private final Function<ChatResponse, String> responseToString;
52-
5351
private final int order;
52+
private final LogLevel requestLogLevel;
53+
private final LogLevel responseLogLevel;
5454

5555
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);
5757
}
5858

5959
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);
6161
}
6262

6363
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) {
6568
this.requestToString = requestToString != null ? requestToString : DEFAULT_REQUEST_TO_STRING;
6669
this.responseToString = responseToString != null ? responseToString : DEFAULT_RESPONSE_TO_STRING;
6770
this.order = order;
71+
this.requestLogLevel = requestLogLevel;
72+
this.responseLogLevel = responseLogLevel;
6873
}
6974

7075
@Override
@@ -80,7 +85,7 @@ public ChatClientResponse adviseCall(ChatClientRequest chatClientRequest, CallAd
8085

8186
@Override
8287
public Flux<ChatClientResponse> adviseStream(ChatClientRequest chatClientRequest,
83-
StreamAdvisorChain streamAdvisorChain) {
88+
StreamAdvisorChain streamAdvisorChain) {
8489
logRequest(chatClientRequest);
8590

8691
Flux<ChatClientResponse> chatClientResponses = streamAdvisorChain.nextStream(chatClientRequest);
@@ -89,11 +94,41 @@ public Flux<ChatClientResponse> adviseStream(ChatClientRequest chatClientRequest
8994
}
9095

9196
private void logRequest(ChatClientRequest request) {
92-
logger.debug("request: {}", this.requestToString.apply(request));
97+
logMessage(requestLogLevel, "request: {}", this.requestToString.apply(request));
9398
}
9499

95100
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+
}
97132
}
98133

99134
@Override
@@ -115,13 +150,17 @@ public static Builder builder() {
115150
return new Builder();
116151
}
117152

153+
public enum LogLevel {
154+
TRACE, DEBUG, INFO, WARN, ERROR
155+
}
156+
118157
public static final class Builder {
119158

120159
private Function<ChatClientRequest, String> requestToString;
121-
122160
private Function<ChatResponse, String> responseToString;
123-
124161
private int order = 0;
162+
private LogLevel requestLogLevel = LogLevel.DEBUG;
163+
private LogLevel responseLogLevel = LogLevel.DEBUG;
125164

126165
private Builder() {
127166
}
@@ -141,10 +180,30 @@ public Builder order(int order) {
141180
return this;
142181
}
143182

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;
146186
}
147187

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+
}
149198

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+
}
150209
}

0 commit comments

Comments
 (0)