Spring Integration:如何开启SFTP Outbound Gateway重试日志?
SFTP Outbound Gateway 重试日志开启方法
一、通过application.yml配置日志级别(最简便方式)
Spring Retry的重试操作日志默认由org.springframework.retry包输出,只需在配置文件中调整该包的日志级别为DEBUG或INFO,就能捕获重试相关记录。同时可开启Spring Integration SFTP模块的日志,辅助排查问题:
logging: level: org.springframework.retry: DEBUG org.springframework.integration.sftp: INFO
- 设置为
DEBUG会输出最详细的重试细节(比如重试次数、触发异常、重试间隔等); - 若只需基础重试记录,设为
INFO即可。
二、确认Retry Advice与SFTP Outbound Gateway的关联有效性
如果配置了Retry Advice但日志仍无输出,先检查是否已将Advice正确绑定到sftpOutboundGateway实例:
例如在IntegrationFlow配置中,需确保通过.advice()方法关联重试通知:
@Bean public IntegrationFlow sftpOutboundFlow() { return IntegrationFlows.from("sftpOutboundChannel") .handle(Sftp.outboundGateway(sftpSessionFactory(), Command.GET, "'remote-directory/*'") .localDirectory(new File("local-dir")), e -> e.advice(retryAdvice())) // 绑定重试Advice .get(); } @Bean public RetryAdvice retryAdvice() { RetryTemplate retryTemplate = new RetryTemplate(); // 配置重试策略(比如固定间隔、重试次数) SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy(); retryPolicy.setMaxAttempts(3); retryTemplate.setRetryPolicy(retryPolicy); FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy(); backOffPolicy.setBackOffPeriod(1000); // 1秒间隔 retryTemplate.setBackOffPolicy(backOffPolicy); return RetryInterceptorBuilder.stateless().retryTemplate(retryTemplate).build(); }
三、自定义RetryListener实现更灵活的日志(可选)
如果需要对重试日志做定制化输出(比如添加业务标识、自定义格式),可以实现RetryListener接口并注入到RetryTemplate中:
public class CustomRetryListener implements RetryListener { private static final Logger logger = LoggerFactory.getLogger(CustomRetryListener.class); @Override public <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) { return true; } @Override public <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) { } @Override public <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) { int retryCount = context.getRetryCount(); logger.warn("SFTP操作重试触发,第{}次重试,异常信息:{}", retryCount + 1, throwable.getMessage()); } }
然后在RetryAdvice配置中添加该Listener:
@Bean public RetryAdvice retryAdvice() { RetryTemplate retryTemplate = new RetryTemplate(); // ... 原有重试策略配置 retryTemplate.registerListener(new CustomRetryListener()); // 注册自定义Listener return RetryInterceptorBuilder.stateless().retryTemplate(retryTemplate).build(); }
内容的提问来源于stack exchange,提问作者Choff
相关产品推荐
相关产品推荐

