Spring集成中不使用xml文件的日志记录过程
我的目标是记录进程的时间,而不使用xml文件进行配置。通过阅读其他帖子,我在集成流中找到了丰富的标题。这种方法是有效的,但目的不对。对于每一个新启动的进程,当应用程序启动时,它都会给我一个启动时间(即常数)。见下文:Spring集成中不使用xml文件的日志记录过程,spring,spring-integration,Spring,Spring Integration,我的目标是记录进程的时间,而不使用xml文件进行配置。通过阅读其他帖子,我在集成流中找到了丰富的标题。这种方法是有效的,但目的不对。对于每一个新启动的进程,当应用程序启动时,它都会给我一个启动时间(即常数)。见下文: @Bean public IntegrationFlow processFileFlow() { return IntegrationFlows .from(FILE_CHANNEL_PROCESSING) .transform(fileTo
@Bean
public IntegrationFlow processFileFlow() {
return IntegrationFlows
.from(FILE_CHANNEL_PROCESSING)
.transform(fileToStringTransformer())
.enrichHeaders(h -> h.header("startTime", String.valueOf(System.currentTimeMillis())))
.handle(FILE_PROCESSOR, "processFile").get();
}
我的目标是在不使用xml文件的情况下正确地记录过程,如我上面所说,但我没有做到这一点。我找到了一个示例,并尝试了使用ChannelInterceptorAdapter的解决方案,如下所示:
@Component(value = "integrationLoggingInterceptor")
public class IntegrationLoggingInterceptor extends ChannelInterceptorAdapter {
private static final Logger log = LoggerFactory.getLogger(IntegrationLoggingInterceptor.class);
@Override
public void postSend(Message<?> message, MessageChannel channel, boolean sent) {
log.debug("Post Send - Channel " + channel.getClass());
log.debug("Post Send - Headers: " + message.getHeaders() + " Payload: " + message.getPayload() + " Message sent?: " + sent);
}
@Override
public Message<?> postReceive(Message<?> message, MessageChannel channel) {
try {
log.debug("Post Receive - Channel " + channel.getClass());
log.debug("Post Receive - Headers: " + message.getHeaders() + " Payload: " + message.getPayload());
} catch (Exception ex) {
log.error("Error in post receive : ", ex);
}
return message;
}
}
组件(value=“integrationLoggingInterceptor”)
公共类集成LoggingInterceptor扩展ChannelInterceptorAdapter{
私有静态最终记录器log=LoggerFactory.getLogger(IntegrationLoggingInterceptor.class);
@凌驾
public void postSend(消息消息、消息通道、布尔发送){
debug(“Post Send-Channel”+Channel.getClass());
log.debug(“发送后-标题:“+message.getHeaders()+”有效负载:“+message.getPayload()+”已发送消息?:“+sent”);
}
@凌驾
公共消息postReceive(消息消息、消息通道){
试一试{
调试(“接收后通道”+通道.getClass());
log.debug(“Post-Receive-Headers:+message.getHeaders()+”负载:+message.getPayload());
}捕获(例外情况除外){
log.error(“接收后出错:”,ex);
}
返回消息;
}
}
但我没有收到任何日志。有什么想法吗?enrichHeaders(h->h.header(“startTime”,String.valueOf(System.currentTimeMillis()))属于以下内容:
public <V> HeaderEnricherSpec header(String name, V value, Boolean overwrite) {
AbstractHeaderValueMessageProcessor<V> headerValueMessageProcessor =
new StaticHeaderValueMessageProcessor<>(value);
headerValueMessageProcessor.setOverwrite(overwrite);
return header(name, headerValueMessageProcessor);
}
非常感谢(快速回答)!你救了我一天。
.enrichHeaders(h ->
h.headerFunction("startTime",
m -> String.valueOf(System.currentTimeMillis())))