Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

...

MDC

...

logging

...

Available

...

as

...

of

...

Camel

...

2.7

...

In

...

Camel

...

2.7

...

we

...

migrated

...

to

...

use

...

slf4j

...

as

...

the

...

logging

...

framework

...

in

...

Camel.

...

This

...

allows

...

us

...

to

...

support

...

MDC

...

logging.
See more details about MDC logging in the logback manual.

The log kit in use must support MDC, such as:

See the log kit documentation how to configure and use MDC.

Enabling in Camel

To enable MDC logging in Camel you can do it as follows:

Code Block
|http://www.slf4j.org/api/org/slf4j/MDC.html].
See more details about MDC logging in the [logback manual|http://logback.qos.ch/manual/mdc.html].

The log kit in use must support MDC, such as:
- [log4j|http://logging.apache.org/log4j/1.2/]
- [logback|http://logback.qos.ch/]
- [pax logging|http://wiki.ops4j.org/display/paxlogging/Pax+Logging]

See the log kit documentation how to configure and use MDC.

h3. Enabling in Camel

To enable MDC logging in Camel you can do it as follows:
{code}
CamelContext context = ...
context.setUseMDCLogging(true);
...
{code}

In

...

XML

...

you

...

enable

...

it

...

using

...

the

...

useMDCLogging

...

attribute

...

as

...

follows:

Code Block
xml
xml

{code:xml}
<camelContext xmlns="http://camel.apache.org/schema/spring" useMDCLogging="true">
  ...
</camelContext>
{code}

h3. MDC information

Camel provides the following context information available for MDC:

h4. Camel 

MDC information

Camel provides the following context information available for MDC:

Camel 2.9.x

...

or older

Wiki Markup
 older
{div:class=confluenceTableSmall}
|| Key || Description ||
| {{exchangeId}} | The exchange id |
| {{messageId}} | *Camel 2.9.1:* The message id |
| {{correlationId}} | The correlation id of the exchange if it's correlated. For example a sub message from the [Splitter] EIP |
| {{transactionKey}} | The id of the transaction for transacted exchanges. Note the id is not unique, but its the id of the transaction template that marks the transaction boundary for the given transaction. Hence we decided to name the key {{transactionKey}} and not {{transactionID}} to point out this fact. |
| {{routeId}} | The id of the route, in which the exchange is currently being routed |
| {{breadcrumbId}} | *Camel 2.8:* An unique id used for tracking messages across transports. |
| {{camelContextId}} | *Camel 2.8.3/2.9:* the camel context id used for tracking the message from different camel context. |
{div}

h4. 

Camel

...

2.10 onwards

Wiki Markup
 onwards
{div:class=confluenceTableSmall}
|| Key || Description ||
| {{camel.exchangeId}} | The exchange id |
| {{camel.messageId}} | The message id |
| {{camel.correlationId}} | The correlation id of the exchange if it's correlated. For example a sub message from the [Splitter] EIP |
| {{camel.transactionKey}} | The id of the transaction for transacted exchanges. Note the id is not unique, but its the id of the transaction template that marks the transaction boundary for the given transaction. Hence we decided to name the key {{transactionKey}} and not {{transactionID}} to point out this fact. |
| {{camel.routeId}} | The id of the route, in which the exchange is currently being routed |
| {{camel.breadcrumbId}} | An unique id used for tracking messages across transports. |
| {{camel.contextId}} | The camel context id used for tracking the message from different camel context. |
{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 log4j.properties file as shown:

Code Block
|http://karaf.apache.org/]. 

h3. Example using log4j

If you use log4j you can configure MDC in the log4j.properties file as shown:
{code}
log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %-10.10X{camel.exchangeId} - %-10.10X{camel.routeId} - %m%n
{code}

Camel

...

will

...

log

...

on

...

startup

...

if

...

MDC

...

is

...

enabled

...

or

...

not

{
Code Block
}
INFO  SpringCamelContext -            -            - MDC logging is enabled on CamelContext: camel-1
{code}

The

...

follow

...

snippet

...

is

...

from

...

an

...

unit

...

test

...

which

...

shows

...

MDC

...

in

...

use.

...

Notice

...

the

...

exchange

...

id

...

and

...

route

...

id

...

is

...

displayed

...

in

...

their

...

respective

...

columns

...

in

...

the

...

log

...

file:

{
Code Block
}
INFO  SpringCamelContext -            -            - Apache Camel  (CamelContext: camel-1) started in 1.228 seconds
INFO  foo                - 358739-0-2 - route-a    - Exchange[ExchangePattern:InOnly, BodyType:String, Body:Hello World]
INFO  bar                - 358739-0-2 - route-b    - Exchange[ExchangePattern:InOnly, BodyType:String, Body:Hello World]
INFO  MockEndpoint       -            -            - Asserting: Endpoint[mock://result] is satisfied
{code}

h3. Using breadcrumb
*Available as of Camel 

Using breadcrumb

Available as of Camel 2.8

...


The

...

breadcrumbId

...

key

...

for

...

MDC

...

logging

...

is

...

only

...

available

...

if

...

useBreadcrumb

...

option

...

has

...

been

...

enabled

...

on

...

CamelContext

...

(its

...

default

...

enabled).

...

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.

...

By

...

storing

...

the

...

breadcrumb

...

as

...

a

...

header

...

allow

...

us

...

to

...

transport

...

the

...

breadcrumb

...

across

...

transports

...

which

...

supports

...

message

...

body

...

and

...

headers.

...

For

...

example

...

HTTP

...

and

...

JMS

...

and

...

many

...

other

...

transports

...

does

...

that.

...

If

...

you

...

want

...

to

...

disable

...

breadcrumb

...

you

...

do

...

as

...

follows

...

in

...

Java

{
Code Block
}
CamelContext context = ...
context.setUseBreadcrumb(false);
...
{code}

And

...

in

...

XML

...

DSL

Code Block
xml
xml

{code:xml}
<camelContext xmlns="http://camel.apache.org/schema/spring" useBreadcrumb="false">
  ...
</camelContext>
{code}