2013-02-04 4 views
0

로깅 메시지를 지정하기 위해 스프링 통합에서 인터셉터를 구성 할 수 있습니까?스프링 통합에서 인터셉터로 로깅 메시지 보내기

로깅 채널 어댑터가 가입하는 로깅 채널로 메시지를 보내려면 와이어 탭을 사용하는 것과는 대조적입니다. 이 접근 방식의 문제점은 로깅 채널에 정확히 기록 할 대상에 대한 표현식이 있다는 것입니다. 필자는 글로벌 채널 인터셉터를 사용하여 로깅 메시지를 지정하고 로깅 채널 어댑터에 보내고 싶습니다. 가능한 모든 로깅 메시지에 대해 로깅 채널 어댑터를 정의하지 않아도됩니다.

잠시 동안 채널 인터셉터 정의 내에서 문자열 로깅 메시지 (및 지연 로깅 채널의 출력 채널)를 생성하기 위해 SpEL 표현식을 사용하는 서비스 활성기를 정의 할 수 있다고 생각했지만 입력 채널.

답변

1

와이어 탭을 사용하는 대신 관심있는 채널을 <publish-subscribe-channel/>에 만들 수 있습니다.

채널에 적절한 변환기를 구독하십시오 (output-channel은 로깅 어댑터로 이동).

변압기 및 다른 가입자의 order 속성을 사용하여 실제 가입자 전후에 로그가 발생하는지 여부를 제어 할 수 있습니다.

다른 대안이어서 <header-value-router/>에게 보낼 메시지

MessageBuilder.fromMessage(message).setHeader('foo', routeForThisMessageType).build() 

에 헤더를 추가하는 글로벌 인터셉터 차례로 적절한 변환기로 라우팅하고, 거기서 하나의 기록 채널 어댑터한다.

물론 원하는 경우 라우팅 및/또는 변환을 요격기와 결합 할 수 있습니다.

+0

고마워요. 게리. 슬프게도 나는 원래의 채널을 변경할 수 없다. (나는 추상적 인 프로젝트와 설정을 가지고있다. 그리고 서브 프로젝트를 구현하면 그 차이를 메울 수있다.) 나는 글로벌 인터셉터로 기존 채널을 '장식'하기를 바랬다. –

+0

내 대답에 대한 다른 대안을 추가했습니다. –

관련 문제