...
Available as of Camel 2.7
In From Camel 2.7 we migrated to use slf4j as the : Camel uses the SLF4J logging framework in Camel. This allows us Camel to support MDC logging.
See For more details information about about MDC logging in see the logback manual.
The log kit logging framework in use must support MDC, such as. The following frameworks support MDC:
See the log kit documentation logging framework's documentation for how to configure and it to use MDC.
Enabling MDC Logging in Camel
To enable MDC logging in Camel you can do it as followsusing Java:
Code Block | ||
---|---|---|
| ||
CamelContext context = ...
context.setUseMDCLogging(true);
...
|
In XML you enable it using the useMDCLogging
attribute as followsTo enable MDC logging using Spring XML set CamelContext's useMDCLogging
attribute:
Code Block | ||||
---|---|---|---|---|
| ||||
<camelContext xmlns="http://camel.apache.org/schema/spring" useMDCLogging="true">
...
</camelContext>
|
MDC
...
Information
Camel provides the following context information available for MDC:
Before Camel 2.10:
Div | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||
|
From Camel 2.10:
Div | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||
|
The keys are subject to change as we want to align and leverage MDC across other Apache products such as ActiveMQ, ServiceMix and Karaf.
Example
...
Using LOG4J
If you use log4j you can configure MDC in the the log4j.properties
file as shown:
Code Block | ||
---|---|---|
| ||
log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %-10.10X{camel.exchangeId} - %-10.10X{correlationId} - %-10.10X{camel.routeId} - %m%n |
Camel will log on startup if MDC is enabled or not
Code Block | ||
---|---|---|
| ||
2011-02-03 11:19:20,570 [main ] INFO SpringCamelContext - - - - MDC logging is enabled on CamelContext: camel-1 |
The follow snippet is from an unit test which shows MDC in use. Notice Note that the exchange id and route id is are displayed in their respective separate columns in the log file:
Code Block | ||
---|---|---|
| ||
2011-02-03 11:19:21,798 [main ] INFO SpringCamelContext - - - - Apache Camel (CamelContext: camel-1) started in 1.228 seconds 2011-02-03 11:19:21,892 [main ] INFO foo - 358739-0-2 - - route-a - Exchange[ExchangePattern:InOnly, BodyType:String, Body:Hello World] 2011-02-03 11:19:21,894 [main ] INFO bar - 358739-0-2 - - route-b - Exchange[ExchangePattern:InOnly, BodyType:String, Body:Hello World] 2011-02-03 11:19:21,896 [main ] INFO MockEndpoint - - - - Asserting: Endpoint[mock://result] is satisfied |
Enabling Breadcrumb Support
From Camel 2.8:
The breadcrumbId
key for MDC logging is only available if useBreadcrumb=true
has been set on the CamelContext (default is true). When enabled Camel will enrich the Camel Message by adding a header to it with the key breadcrumbId
containing the id. Camel will use the messageId
if no existing breadcrumbId
was found in the message.
As the breadcrumb id is stored in a header it will persist across any transport that supports the use of headers, for example the HTTP and JMS transports.
Disabling Breadcrumb Support
Java DSL:
Code Block | ||
---|---|---|
| ||
CamelContext context = ...
context.setUseBreadcrumb(false);
...
|
XML DSL:
Code Block | ||||
---|---|---|---|---|
| ||||
<camelContext xmlns="http://camel.apache.org/schema/spring" useBreadcrumb="false">
...
</camelContext>
|