Since we're on a major migration process of this website, some component documents here are out of sync right now. In the meantime you may want to look at the early version of the new website
https://camel.apache.org/staging/
We would very much like to receive any feedback on the new site, please join the discussion on the Camel user mailing list.

EventNotifier to log details about all sent Exchanges

If you want to log information all time taken to send and receive replies when sending to external endpoints, then you can leverage the EventNotifier in Camel. It allows you to subscribe to events and react upon them.

For example we want to log the time it takes to send to endpoints which can be done by implementing a class which this logic as follows:

Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20
Then in Java DSL you can tell Camel to use your custom EventNotifier simply by adding it:
context.getManagementStrategy().addEventNotifier(new MyLoggingSentEventNotifer());

And in Spring XML you declare a Spring bean and Camel will automatically pick it up:Error rendering macro 'code': Invalid value specified for parameter 'java.lang.NullPointerException'

<bean id="myLoggingEventNotifier" class="org.apache.camel.processor.MyLoggingSentEventNotifer"/>

<camelContext xmlns="http://camel.apache.org/schema/spring">

    <route>
        <from uri="direct:start"/>
        <to uri="direct:bar"/>
        <to uri="mock:result"/>
    </route>

    <route>
        <from uri="direct:bar"/>
        <delay><constant>1000</constant></delay>
    </route>

</camelContext>
If you run this example you will notice how Camel logs this now:
INFO  CamelContextFactoryBean        - Using custom EventNotifier with id: myLoggingEventNotifier and implementation: org.apache.camel.processor.MyLoggingSentEventNotifer@76bf9e
INFO  MyLoggingSentEventNotifer      - Took 1001 millis to send to: Endpoint[direct://bar]
INFO  MyLoggingSentEventNotifer      - Took 0 millis to send to: Endpoint[mock://result]
INFO  MyLoggingSentEventNotifer      - Took 1013 millis to send to: Endpoint[direct://start]

You can implement logic to filter which endpoints to log, and maybe also thresholds to skip logging if it was fast, e.g. < 1 sec. Then you have a logger which logs all slow events.

Tip you can use the EndpointHelper.matchEndpoint method to leverage the same filtering capabilities that for example the Intercept uses in Camel.

You can see which EventObject Camel provides from the javadoc.

From Camel 2.10: there is also a ExchangeSendingEvent which is an event triggered before sending the message to the endpoint. Then we have an even for both before and after sending the message.

© 2004-2015 The Apache Software Foundation.
Apache Camel, Camel, Apache, the Apache feather logo, and the Apache Camel project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
Graphic Design By Hiram