You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/01/06 11:28:18 UTC
[camel] branch main updated: CAMEL-17417: camel-core - Route stack trace to include source file:line
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 71b45e1 CAMEL-17417: camel-core - Route stack trace to include source file:line
71b45e1 is described below
commit 71b45e18ad175d77bffaa72f9de7165ed7b3926b
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Jan 6 12:26:52 2022 +0100
CAMEL-17417: camel-core - Route stack trace to include source file:line
---
.../docs/modules/eips/pages/message-history.adoc | 105 ++++++++++-----------
1 file changed, 52 insertions(+), 53 deletions(-)
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/message-history.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/message-history.adoc
index 802c50e..9addbc6 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/message-history.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/message-history.adoc
@@ -137,82 +137,81 @@ And example is provided below:
[source,text]
----
-2020-01-15 11:58:34,834 [read #3 - Delay] ERROR DefaultErrorHandler - Failed delivery for (MessageId: ID-davsclaus-pro-local-1579085914402-0-2 on ExchangeId: ID-davsclaus-pro-local-1579085914402-0-3). Exhausted after delivery attempt: 1 caught: java.lang.IllegalArgumentException: Forced to dump message history
+2022-01-06 12:13:06.721 ERROR 67729 --- [ - timer://java] o.a.c.p.e.DefaultErrorHandler : Failed delivery for (MessageId: B4365D4CED3E5E1-0000000000000004 on ExchangeId: B4365D4CED3E5E1-0000000000000004). Exhausted after delivery attempt: 1 caught: java.lang.IllegalArgumentException: The number is too low
-Message History
+Message History (source location is disabled)
---------------------------------------------------------------------------------------------------------------------------------------
-RouteId ProcessorId Processor Elapsed (ms)
-[route1 ] [route1 ] [from[seda://start] ] [ 432]
-[route1 ] [to1 ] [log:foo ] [ 5]
-[route1 ] [to2 ] [direct:bar ] [ 111]
-[route2 ] [to5 ] [log:bar ] [ 0]
-[route2 ] [delay2 ] [delay[100] ] [ 110]
-[route2 ] [to6 ] [mock:bar ] [ 0]
-[route1 ] [delay1 ] [delay[300] ] [ 305]
-[route1 ] [to3 ] [log:baz ] [ 2]
-[route1 ] [process1 ] [Processor@0x5e600dd5 ] [ 0]
+Source ID Processor Elapsed (ms)
+ route1/route1 from[timer://java?period=2s] 2
+ route1/setBody1 setBody[bean[MyJavaRouteBuilder method:randomNumbe 0
+ route1/log1 log 1
+ route1/filter1 filter[simple{${body} < 30}] 0
+ route1/throwException1 throwException[java.lang.IllegalArgumentException] 0
Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
-java.lang.IllegalArgumentException: Forced to dump message history
- at org.apache.camel.processor.MessageHistoryDumpRoutingTest$1$1.process(MessageHistoryDumpRoutingTest.java:52) ~[test-classes/:?]
- at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:64) ~[classes/:?]
- at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryState.run(RedeliveryErrorHandler.java:477) ~[classes/:?]
- at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:186) ~[classes/:?]
- at org.apache.camel.impl.engine.DefaultReactiveExecutor.schedule(DefaultReactiveExecutor.java:56) ~[classes/:?]
- at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryState.lambda$run$1(RedeliveryErrorHandler.java:481) ~[classes/:?]
- at org.apache.camel.processor.DelayProcessorSupport$ProcessCall$1.done(DelayProcessorSupport.java:77) [classes/:?]
- at org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:63) [classes/:?]
- at org.apache.camel.processor.DelayProcessorSupport$ProcessCall.run(DelayProcessorSupport.java:70) [classes/:?]
- at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_201]
- at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_201]
- at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_201]
- at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:1.8.0_201]
- at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_201]
- at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_201]
- at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]
+
+java.lang.IllegalArgumentException: The number is too low
+ at sample.camel.MyJavaRouteBuilder.configure(MyJavaRouteBuilder.java:34) ~[classes/:na]
+ at org.apache.camel.builder.RouteBuilder.checkInitialized(RouteBuilder.java:607) ~[camel-core-model-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
+ at org.apache.camel.builder.RouteBuilder.configureRoutes(RouteBuilder.java:553) ~[camel-core-model-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
----
When Message History is enabled then the full history is logged as shown above. Here we can see the full path
-the message has been routed, where it started from route1, called route2 and returned to route1 again, and so on.
+the message has been routed.
When Message History is disabled (by default) then the error handler logs a brief history with the last node
where the exception occurred as shown below:
[source,text]
----
-2020-01-15 11:59:33,238 [read #3 - Delay] ERROR DefaultErrorHandler - Failed delivery for (MessageId: ID-davsclaus-pro-local-1579085972821-0-2 on ExchangeId: ID-davsclaus-pro-local-1579085972821-0-3). Exhausted after delivery attempt: 1 caught: java.lang.IllegalArgumentException: Forced to dump message history
+2022-01-06 12:12:32.072 ERROR 67704 --- [ - timer://java] o.a.c.p.e.DefaultErrorHandler : Failed delivery for (MessageId: CD6D1B185A3706F-0000000000000004 on ExchangeId: CD6D1B185A3706F-0000000000000004). Exhausted after delivery attempt: 1 caught: java.lang.IllegalArgumentException: The number is too low
-Message History (complete message history is disabled)
+Message History (source location and message history is disabled)
---------------------------------------------------------------------------------------------------------------------------------------
-RouteId ProcessorId Processor Elapsed (ms)
-[route1 ] [route1 ] [from[seda://start] ] [ 419]
+Source ID Processor Elapsed (ms)
+ route1/route1 from[timer://java?period=2s] 2
...
-[route1 ] [process1 ] [Processor@0x229c6181 ] [ 0]
+ route1/throwException1 throwException[java.lang.IllegalArgumentException] 0
Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
-java.lang.IllegalArgumentException: Forced to dump message history
- at org.apache.camel.processor.MessageHistoryDumpRoutingTest$1$1.process(MessageHistoryDumpRoutingTest.java:52) ~[test-classes/:?]
- at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:64) ~[classes/:?]
- at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryState.run(RedeliveryErrorHandler.java:477) ~[classes/:?]
- at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:186) ~[classes/:?]
- at org.apache.camel.impl.engine.DefaultReactiveExecutor.schedule(DefaultReactiveExecutor.java:56) ~[classes/:?]
- at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryState.lambda$run$1(RedeliveryErrorHandler.java:481) ~[classes/:?]
- at org.apache.camel.processor.DelayProcessorSupport$ProcessCall$1.done(DelayProcessorSupport.java:77) [classes/:?]
- at org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:63) [classes/:?]
- at org.apache.camel.processor.DelayProcessorSupport$ProcessCall.run(DelayProcessorSupport.java:70) [classes/:?]
- at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_201]
- at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_201]
- at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_201]
- at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:1.8.0_201]
- at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_201]
- at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_201]
- at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]
+
+java.lang.IllegalArgumentException: The number is too low
+ at sample.camel.MyJavaRouteBuilder.configure(MyJavaRouteBuilder.java:34) ~[classes/:na]
+ at org.apache.camel.builder.RouteBuilder.checkInitialized(RouteBuilder.java:607) ~[camel-core-model-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
+ at org.apache.camel.builder.RouteBuilder.configureRoutes(RouteBuilder.java:553) ~[camel-core-model-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
----
Here you can see the Message History only outputs the input (route1) and the last step
-where the exception occurred (process1).
+where the exception occurred (throwException1).
+
+Notice that the source column is empty, because source location is not enabled.
+When enabled then, you can see exactly which source file and line number the message routed:
+
+[source,text]
+----
+2022-01-06 12:19:01.277 ERROR 67870 --- [ - timer://java] o.a.c.p.e.DefaultErrorHandler : Failed delivery for (MessageId: 37412D6F722F679-0000000000000003 on ExchangeId: 37412D6F722F679-0000000000000003). Exhausted after delivery attempt: 1 caught: java.lang.IllegalArgumentException: The number is too low
+
+Message History
+---------------------------------------------------------------------------------------------------------------------------------------
+Source ID Processor Elapsed (ms)
+MyJavaRouteBuilder:29 route1/route1 from[timer://java?period=2s] 10
+MyJavaRouteBuilder:32 route1/setBody1 setBody[bean[MyJavaRouteBuilder method:randomNumbe 1
+MyJavaRouteBuilder:33 route1/log1 log 1
+MyJavaRouteBuilder:34 route1/filter1 filter[simple{${body} < 30}] 0
+MyJavaRouteBuilder:35 route1/throwException1 throwException[java.lang.IllegalArgumentException] 0
+
+Stacktrace
+---------------------------------------------------------------------------------------------------------------------------------------
+
+java.lang.IllegalArgumentException: The number is too low
+ at sample.camel.MyJavaRouteBuilder.configure(MyJavaRouteBuilder.java:34) ~[classes/:na]
+ at org.apache.camel.builder.RouteBuilder.checkInitialized(RouteBuilder.java:607) ~[camel-core-model-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
+ at org.apache.camel.builder.RouteBuilder.configureRoutes(RouteBuilder.java:553) ~[camel-core-model-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
+----
+
+In this case we can see its the `MyJavaRouteBuilder` class on line 35 that is the problem.
=== Configuring route stack-trace from error handler