213.8. 로깅 출력에 대한 전체 사용자 지정

Camel 2.11에서 사용 가능

#Formatting 섹션에 설명된 옵션을 사용하면 로거의 많은 출력을 제어할 수 있습니다. 그러나 로그 줄은 항상 이 구조를 따릅니다.

Exchange[Id:ID-machine-local-50656-1234567901234-1-2, ExchangePattern:InOut,
Properties:{CamelToEndpoint=log://org.apache.camel.component.log.TEST?showAll=true,
CamelCreatedTimestamp=Thu Mar 28 00:00:00 WET 2013},
Headers:{breadcrumbId=ID-machine-local-50656-1234567901234-1-1}, BodyType:String, Body:Hello World, Out: null]

이 형식은…​이 필요하기 때문에 어떤 경우에는 부적절할 수 없습니다.

  • …​ 출력되는 헤더와 속성을 필터링하여 통찰력과 세부 정보 표시 사이에서 균형을 파싱합니다.
  • …​ 가장 읽기 쉬운 것으로 간주되는 로그 메시지를 조정합니다.
  • …​ 로그 마이닝 시스템(예: Splunk)을 사용하여 다이제스트를 위한 로그 메시지를 조정합니다.
  • …​ 특정 본문 유형을 인쇄합니다.
  • …​ etc.

절대 사용자 지정이 필요할 때마다 ExchangeFormatter 인터페이스를 구현하는 클래스를 만들 수 있습니다. Exchange 형식 내에서 전체 Exchange에 액세스할 수 있으므로 필요한 정확한 정보를 선택하고 사용자 지정 방식으로 포맷하고 반환할 수 있습니다.Within the format (Exchange) method you have access to the full Exchange, so you can select and extract the precise information you need, format it in a custom manner. 반환 값은 최종 로그 메시지가 됩니다.

로그 구성 요소는 다음 두 가지 방법 중 하나로 사용자 지정 ExchangeFormatter 를 선택할 수 있습니다.

레지스트리에서 LogComponent를 명시적으로 인스턴스화합니다.

<bean name="log" class="org.apache.camel.component.log.LogComponent">
   <property name="exchangeFormatter" ref="myCustomFormatter" />
</bean>

213.8.1. 구성에 대한 규칙:*

단순히 logFormatter 라는 이름으로 빈을 등록하면 됩니다. 로그 구성 요소는 자동으로 선택할 수 있을 정도로 지능적입니다.

<bean name="logFormatter" class="com.xyz.MyCustomExchangeFormatter" />
참고

ExchangeFormatter해당 Camel Context 내의 모든 로그 엔드포인트에 적용됩니다. 다른 끝점에 대해 다른 ExchangeFormatter가 필요한 경우 필요에 따라 LogComponent를 여러 번 인스턴스화하고 관련 빈 이름을 끝점 접두사로 사용합니다.

사용자 지정 로그 포맷터를 사용할 때 Camel 2.11.2/2.12 에서 사용자 정의 로그 포맷터에 구성된 로그 URI에 매개변수를 지정할 수 있습니다. 하지만 그렇게 할 때는 "logFormatter"를 프로토타입 범위로 정의해야 하므로 다른 매개 변수가 있는 경우 공유되지 않습니다.

<bean name="logFormatter" class="com.xyz.MyCustomExchangeFormatter" scope="prototype"/>

그런 다음 다른 옵션과 함께 로그 URI를 사용하여 Camel 경로를 사용할 수 있습니다.

<to uri="log:foo?param1=foo&amp;param2=100"/>

<to uri="log:bar?param1=bar&amp;param2=200"/>