3434import 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
38+ * configurable log levels.
3839 *
3940 * @author Christian Tzolov
41+ * @author Engineer Zhong
4042 */
4143public class SimpleLoggerAdvisor implements CallAdvisor , StreamAdvisor {
4244
@@ -52,19 +54,26 @@ public class SimpleLoggerAdvisor implements CallAdvisor, StreamAdvisor {
5254
5355 private final int order ;
5456
57+ private final LogLevel requestLogLevel ;
58+
59+ private final LogLevel responseLogLevel ;
60+
5561 public SimpleLoggerAdvisor () {
56- this (DEFAULT_REQUEST_TO_STRING , DEFAULT_RESPONSE_TO_STRING , 0 );
62+ this (DEFAULT_REQUEST_TO_STRING , DEFAULT_RESPONSE_TO_STRING , 0 , LogLevel . DEBUG , LogLevel . DEBUG );
5763 }
5864
5965 public SimpleLoggerAdvisor (int order ) {
60- this (DEFAULT_REQUEST_TO_STRING , DEFAULT_RESPONSE_TO_STRING , order );
66+ this (DEFAULT_REQUEST_TO_STRING , DEFAULT_RESPONSE_TO_STRING , order , LogLevel . DEBUG , LogLevel . DEBUG );
6167 }
6268
6369 public SimpleLoggerAdvisor (@ Nullable Function <ChatClientRequest , String > requestToString ,
64- @ Nullable Function <ChatResponse , String > responseToString , int order ) {
70+ @ Nullable Function <ChatResponse , String > responseToString , int order , LogLevel requestLogLevel ,
71+ LogLevel responseLogLevel ) {
6572 this .requestToString = requestToString != null ? requestToString : DEFAULT_REQUEST_TO_STRING ;
6673 this .responseToString = responseToString != null ? responseToString : DEFAULT_RESPONSE_TO_STRING ;
6774 this .order = order ;
75+ this .requestLogLevel = requestLogLevel ;
76+ this .responseLogLevel = responseLogLevel ;
6877 }
6978
7079 @ Override
@@ -89,11 +98,41 @@ public Flux<ChatClientResponse> adviseStream(ChatClientRequest chatClientRequest
8998 }
9099
91100 private void logRequest (ChatClientRequest request ) {
92- logger . debug ( "request: {}" , this .requestToString .apply (request ));
101+ logMessage ( requestLogLevel , "request: {}" , this .requestToString .apply (request ));
93102 }
94103
95104 private void logResponse (ChatClientResponse chatClientResponse ) {
96- logger .debug ("response: {}" , this .responseToString .apply (chatClientResponse .chatResponse ()));
105+ logMessage (responseLogLevel , "response: {}" , this .responseToString .apply (chatClientResponse .chatResponse ()));
106+ }
107+
108+ private void logMessage (LogLevel level , String format , Object arg ) {
109+ switch (level ) {
110+ case TRACE :
111+ if (logger .isTraceEnabled ()) {
112+ logger .trace (format , arg );
113+ }
114+ break ;
115+ case DEBUG :
116+ if (logger .isDebugEnabled ()) {
117+ logger .debug (format , arg );
118+ }
119+ break ;
120+ case INFO :
121+ if (logger .isInfoEnabled ()) {
122+ logger .info (format , arg );
123+ }
124+ break ;
125+ case WARN :
126+ if (logger .isWarnEnabled ()) {
127+ logger .warn (format , arg );
128+ }
129+ break ;
130+ case ERROR :
131+ if (logger .isErrorEnabled ()) {
132+ logger .error (format , arg );
133+ }
134+ break ;
135+ }
97136 }
98137
99138 @ Override
@@ -115,6 +154,12 @@ public static Builder builder() {
115154 return new Builder ();
116155 }
117156
157+ public enum LogLevel {
158+
159+ TRACE , DEBUG , INFO , WARN , ERROR
160+
161+ }
162+
118163 public static final class Builder {
119164
120165 private Function <ChatClientRequest , String > requestToString ;
@@ -123,6 +168,10 @@ public static final class Builder {
123168
124169 private int order = 0 ;
125170
171+ private LogLevel requestLogLevel = LogLevel .DEBUG ;
172+
173+ private LogLevel responseLogLevel = LogLevel .DEBUG ;
174+
126175 private Builder () {
127176 }
128177
@@ -141,8 +190,25 @@ public Builder order(int order) {
141190 return this ;
142191 }
143192
193+ public Builder requestLogLevel (LogLevel logLevel ) {
194+ this .requestLogLevel = logLevel ;
195+ return this ;
196+ }
197+
198+ public Builder responseLogLevel (LogLevel logLevel ) {
199+ this .responseLogLevel = logLevel ;
200+ return this ;
201+ }
202+
203+ public Builder logLevel (LogLevel logLevel ) {
204+ this .requestLogLevel = logLevel ;
205+ this .responseLogLevel = logLevel ;
206+ return this ;
207+ }
208+
144209 public SimpleLoggerAdvisor build () {
145- return new SimpleLoggerAdvisor (this .requestToString , this .responseToString , this .order );
210+ return new SimpleLoggerAdvisor (this .requestToString , this .responseToString , this .order ,
211+ this .requestLogLevel , this .responseLogLevel );
146212 }
147213
148214 }
0 commit comments