SimpleLoggerAdvisor.java
package de.mirkosertic.powerstaff.profilesearch.command;
import org.jspecify.annotations.NonNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.chat.client.ChatClientMessageAggregator;
import org.springframework.ai.chat.client.ChatClientRequest;
import org.springframework.ai.chat.client.ChatClientResponse;
import org.springframework.ai.chat.client.advisor.api.BaseAdvisor;
import org.springframework.ai.chat.client.advisor.api.CallAdvisor;
import org.springframework.ai.chat.client.advisor.api.CallAdvisorChain;
import org.springframework.ai.chat.client.advisor.api.StreamAdvisor;
import org.springframework.ai.chat.client.advisor.api.StreamAdvisorChain;
import reactor.core.publisher.Flux;
public class SimpleLoggerAdvisor implements CallAdvisor, StreamAdvisor {
private static final Logger logger = LoggerFactory.getLogger(SimpleLoggerAdvisor.class);
@Override
public String getName() {
return this.getClass().getSimpleName();
}
@Override
public int getOrder() {
return BaseAdvisor.HIGHEST_PRECEDENCE + 100;
}
@Override
public ChatClientResponse adviseCall(@NonNull final ChatClientRequest chatClientRequest, final CallAdvisorChain callAdvisorChain) {
logRequest(chatClientRequest);
final ChatClientResponse chatClientResponse = callAdvisorChain.nextCall(chatClientRequest);
logResponse(chatClientResponse);
return chatClientResponse;
}
@Override
public Flux<ChatClientResponse> adviseStream(@NonNull final ChatClientRequest chatClientRequest,
final StreamAdvisorChain streamAdvisorChain) {
logRequest(chatClientRequest);
final Flux<ChatClientResponse> chatClientResponses = streamAdvisorChain.nextStream(chatClientRequest);
return new ChatClientMessageAggregator().aggregateChatClientResponse(chatClientResponses, this::logResponse);
}
private void logRequest(final ChatClientRequest request) {
logger.debug("request: {}", request);
}
private void logResponse(final ChatClientResponse chatClientResponse) {
logger.debug("response: {}", chatClientResponse);
}
}