Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring集成中不使用xml文件的日志记录过程_Spring_Spring Integration - Fatal编程技术网

Spring集成中不使用xml文件的日志记录过程

Spring集成中不使用xml文件的日志记录过程,spring,spring-integration,Spring,Spring Integration,我的目标是记录进程的时间,而不使用xml文件进行配置。通过阅读其他帖子,我在集成流中找到了丰富的标题。这种方法是有效的,但目的不对。对于每一个新启动的进程,当应用程序启动时,它都会给我一个启动时间(即常数)。见下文: @Bean public IntegrationFlow processFileFlow() { return IntegrationFlows .from(FILE_CHANNEL_PROCESSING) .transform(fileTo

我的目标是记录进程的时间,而不使用xml文件进行配置。通过阅读其他帖子,我在集成流中找到了丰富的标题。这种方法是有效的,但目的不对。对于每一个新启动的进程,当应用程序启动时,它都会给我一个启动时间(即常数)。见下文:

@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())))