Yes, exactly. I want Camel to log the error, so that we can analyze the problem later (when looking at the log file), and at the same time handle the Exchange in our "error" route, which basically means cleaning up some temporary files, and moving some other files. So we don't "handle" the Exchange in a way that makes Everything fine, we just do some extra stuff that is needed when an error occurs. But the actuall logging of the ERROR message, with stack trace, I expect Camel to do for me.
/Jimi ________________________________________ From: Minh Tran <[email protected]> Sent: Monday, April 18, 2016 2:59 AM To: [email protected] Subject: Re: How to log a Processor ERROR with stacktrace using DeadLetterChannel? Hi Jimi What do you mean by "handle the Exchange when the error happens"? Do you mean you want to do some custom processing when you receive that particular error AND also log the stack trace? > On 18 Apr 2016, at 10:35 AM, <[email protected]> > <[email protected]> wrote: > > Hi Minh, > > I'm sorry, but I don't really understand how I can achieve what I want with a > redelivery policy. I mean, sure, I guess the logging would work as I want, > but I still want to be able to handle the Exchange when the error happens. > How can I do that if I can't define a route that the Exchange should be sent > to when an error occurs? Or can I do this with a redelivery policy, and if > so, how? > > /Jimi > ________________________________________ > From: Minh Tran <[email protected]> > Sent: Monday, April 18, 2016 2:22 AM > To: [email protected] > Subject: Re: How to log a Processor ERROR with stacktrace using > DeadLetterChannel? > > Hi > > It’s easier to just define a redelivery policy profile and tell it what you > want to log on exhausted. There are stacks of options you can set on it to > customise it to exactly what you want to log. > > See here for an example > > http://camel.apache.org/redeliverypolicy.html > <http://camel.apache.org/redeliverypolicy.html> > >> On 18 Apr 2016, at 9:56 AM, [email protected] wrote: >> >> Hi, >> >> >> >> How can I log a Processor ERROR with stacktrace using DeadLetterChannel? Ie >> I have a route with a Processor that throws an Exception of some kind, and >> the route has a DeadLetterChannel configured, that sends the exchange to a >> "error" route. And I would like this Exception to be logged on ERROR level, >> with stacktrace. >> >> >> >> My setup, using Camel 2.17.0 and Camel Spring xml, looks something like this: >> >> >> >> <errorHandler id="deadLetterErrorHandler" type="DeadLetterChannel" >> deadLetterUri="direct:error" /> >> >> >> >> <camelContext> >> <route errorHandlerRef="deadLetterErrorHandler"> >> [...] >> <process ref="myProcessor" /><!-- This throws an exception in method >> process(Exchange) --> >> [...] >> </route> >> >> <route> >> <from uri="direct:error" /> >> >> <log logName="com.mycompany" loggingLevel="ERROR" message="Could not handle >> file '${file:name}'" /> >> >> <to >> uri="log:com.mycompany?level=ERROR&showException=true&showCaughtException=true&showStackTrace=true" >> /> >> >> [...] >> </route> >> <camelContext> >> >> >> The expected behaivor is that Camel logs the exception on ERROR logging >> level, with stacktrace. The actual behaivor is that Camel logs the exception >> like this: >> >> >> >> [...] DEBUG org.apache.camel.processor.DeadLetterChannel - Failed delivery >> for (MessageId: 12345 on ExchangeId: 54321). On delivery attempt: 0 caught: >> java.lang.IllegalArgumentException: Exception details... >> >> >> >> Ie it logs the exception on DEBUG log level, and without any stacktrace. >> >> >> >> What can I do to fix this? >> >> >> >> Regards >> /Jimi >
