Spring AI中ChatClient配置SimpleLoggerAdvisor无日志的问题排查
问题排查方案
1. 修复Advisor配置的语法错误
你的Kotlin代码中,defaultAdvisors方法的两个参数间缺少逗号,这会导致SimpleLoggerAdvisor无法被正确注册到ChatClient的Advisor链中:
@Bean fun chatClient(builder: ChatClient.Builder, vectorStore: VectorStore): ChatClient = builder .defaultAdvisors( QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults()), // 添加逗号分隔参数 SimpleLoggerAdvisor() ) .build()
Kotlin要求多参数函数的参数必须用逗号分隔,否则会被解析为单个表达式,导致第二个Advisor未生效。
2. 确认日志配置的有效性
虽然你配置了logging.level.org.springframework.ai.chat.client.advisor: DEBUG,但需确保日志框架(如Logback、Log4j2)的控制台输出允许DEBUG级别日志。比如使用Logback时,需检查logback-spring.xml中控制台Appender的阈值设置:
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> <!-- 确保阈值不高于DEBUG --> </filter> </appender>
3. 调整Advisor执行顺序
Advisor按注册顺序执行,若QuestionAnswerAdvisor提前终止请求流程,SimpleLoggerAdvisor可能无法触发。可将日志Advisor放在第一位,确保它能捕获完整的请求/响应:
@Bean fun chatClient(builder: ChatClient.Builder, vectorStore: VectorStore): ChatClient = builder .defaultAdvisors( SimpleLoggerAdvisor(), QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults()) ) .build()
4. 验证Advisor的触发逻辑
尝试手动指定Advisor调用,排查是否是全局注册的问题:
val prompt = promptService.createPrompt(userQuery, userType) val response = chatClient.prompt(prompt) .advisors(SimpleLoggerAdvisor()) // 手动添加日志Advisor .call()
如果此方式能输出日志,说明全局Advisor的注册仍存在问题,需重新检查Bean配置。
内容的提问来源于stack exchange,提问作者stardust
相关产品推荐
相关产品推荐

