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/03 10:34:44 UTC
[camel] 01/06: CAMEL-17338: Tracer - Use source loc:line in logger name. WIP
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
commit 1513d95469347450a03b7860afd895b42f431476
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Jan 2 17:15:38 2022 +0100
CAMEL-17338: Tracer - Use source loc:line in logger name. WIP
---
.../src/main/java/org/apache/camel/NamedRoute.java | 5 ++
.../src/main/java/org/apache/camel/spi/Tracer.java | 14 ++++-
.../camel/impl/engine/CamelInternalProcessor.java | 9 ++-
.../apache/camel/impl/engine/DefaultTracer.java | 65 +++++++++++++++++++---
.../org/apache/camel/model/RouteDefinition.java | 1 +
5 files changed, 80 insertions(+), 14 deletions(-)
diff --git a/core/camel-api/src/main/java/org/apache/camel/NamedRoute.java b/core/camel-api/src/main/java/org/apache/camel/NamedRoute.java
index e7f4529..4d59294 100644
--- a/core/camel-api/src/main/java/org/apache/camel/NamedRoute.java
+++ b/core/camel-api/src/main/java/org/apache/camel/NamedRoute.java
@@ -31,4 +31,9 @@ public interface NamedRoute {
*/
String getEndpointUrl();
+ /**
+ * Gets the route input
+ */
+ NamedNode getInput();
+
}
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/Tracer.java b/core/camel-api/src/main/java/org/apache/camel/spi/Tracer.java
index 6c090bf..0aa3329 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/Tracer.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/Tracer.java
@@ -38,7 +38,7 @@ public interface Tracer extends StaticService {
/**
* Trace before the route (eg input to route)
*
- * @param route the route
+ * @param route the route EIP
* @param exchange the exchange
*/
void traceBeforeRoute(NamedRoute route, Exchange exchange);
@@ -62,9 +62,19 @@ public interface Tracer extends StaticService {
/**
* Trace after the route (eg output from route)
*
- * @param route the route
+ * @param route the route EIP
* @param exchange the exchange
*/
+ void traceAfterRoute(NamedRoute route, Exchange exchange);
+
+ /**
+ * Trace after the route (eg output from route)
+ *
+ * @param route the route
+ * @param exchange the exchange
+ * @deprecated use {@link #traceAfterRoute(NamedRoute, Exchange)}
+ */
+ @Deprecated
void traceAfterRoute(Route route, Exchange exchange);
/**
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
index 97ba072..f84bea7 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
@@ -1010,7 +1010,8 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
this.processorDefinition = processorDefinition;
this.routeDefinition = routeDefinition;
this.tracingAfterRoute
- = routeDefinition != null ? new TracingAfterRoute(tracer, routeDefinition.getRouteId()) : null;
+ = routeDefinition != null
+ ? new TracingAfterRoute(tracer, routeDefinition.getRouteId(), routeDefinition) : null;
}
@Override
@@ -1045,16 +1046,18 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
private final Tracer tracer;
private final String routeId;
+ private final NamedRoute node;
- private TracingAfterRoute(Tracer tracer, String routeId) {
+ private TracingAfterRoute(Tracer tracer, String routeId, NamedRoute node) {
this.tracer = tracer;
this.routeId = routeId;
+ this.node = node;
}
@Override
public void onAfterRoute(Route route, Exchange exchange) {
if (routeId.equals(route.getId())) {
- tracer.traceAfterRoute(route, exchange);
+ tracer.traceAfterRoute(node, exchange);
}
}
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultTracer.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultTracer.java
index 7cf8e6d..73c4bad 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultTracer.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultTracer.java
@@ -21,6 +21,7 @@ import java.util.Objects;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
import org.apache.camel.Exchange;
+import org.apache.camel.LineNumberAware;
import org.apache.camel.NamedNode;
import org.apache.camel.NamedRoute;
import org.apache.camel.Route;
@@ -31,6 +32,7 @@ import org.apache.camel.support.PatternHelper;
import org.apache.camel.support.builder.ExpressionBuilder;
import org.apache.camel.support.processor.DefaultExchangeFormatter;
import org.apache.camel.support.service.ServiceSupport;
+import org.apache.camel.util.FileUtil;
import org.apache.camel.util.StringHelper;
import org.apache.camel.util.URISupport;
import org.slf4j.Logger;
@@ -77,7 +79,6 @@ public class DefaultTracer extends ServiceSupport implements CamelContextAware,
}
@Override
- @SuppressWarnings("unchecked")
public void traceBeforeNode(NamedNode node, Exchange exchange) {
if (shouldTrace(node)) {
traceCounter++;
@@ -95,7 +96,7 @@ public class DefaultTracer extends ServiceSupport implements CamelContextAware,
String data = exchangeFormatter.format(exchange);
sb.append(data);
String out = sb.toString();
- dumpTrace(out);
+ dumpTrace(out, node);
}
}
@@ -121,17 +122,28 @@ public class DefaultTracer extends ServiceSupport implements CamelContextAware,
boolean original = route.getRouteId().equals(exchange.getFromRouteId());
String arrow = original ? "*-->" : "--->";
+ // we need to capture original source:line-number
+ if (original && camelContext.isDebugging()) {
+ int line = route.getInput().getLineNumber();
+ String loc = route.getInput().getLocation();
+ }
+
StringBuilder sb = new StringBuilder();
sb.append(String.format(TRACING_OUTPUT, arrow, route.getRouteId(), label));
sb.append(" ");
String data = exchangeFormatter.format(exchange);
sb.append(data);
String out = sb.toString();
- dumpTrace(out);
+ dumpTrace(out, route);
}
@Override
public void traceAfterRoute(Route route, Exchange exchange) {
+ // noop
+ }
+
+ @Override
+ public void traceAfterRoute(NamedRoute route, Exchange exchange) {
if (!traceBeforeAndAfterRoute) {
return;
}
@@ -140,20 +152,20 @@ public class DefaultTracer extends ServiceSupport implements CamelContextAware,
// the sanitizeUri takes a very long time for very long string and the format cuts this to
// 33 characters, anyway. Cut this to 50 characters. This will give enough space for removing
// characters in the sanitizeUri method and will be reasonably fast
- String uri = route.getConsumer().getEndpoint().getEndpointUri();
+ String uri = route.getEndpointUrl();
String label = "from[" + URISupport.sanitizeUri(StringHelper.limitLength(uri, 50) + "]");
// the arrow has a * if its an exchange that is done
- boolean original = route.getId().equals(exchange.getFromRouteId());
+ boolean original = route.getRouteId().equals(exchange.getFromRouteId());
String arrow = original ? "*<--" : "<---";
StringBuilder sb = new StringBuilder();
- sb.append(String.format(TRACING_OUTPUT, arrow, route.getId(), label));
+ sb.append(String.format(TRACING_OUTPUT, arrow, route.getRouteId(), label));
sb.append(" ");
String data = exchangeFormatter.format(exchange);
sb.append(data);
String out = sb.toString();
- dumpTrace(out);
+ dumpTrace(out, route);
}
@Override
@@ -240,8 +252,43 @@ public class DefaultTracer extends ServiceSupport implements CamelContextAware,
this.exchangeFormatter = exchangeFormatter;
}
- protected void dumpTrace(String out) {
- LOG.info(out);
+ protected String getLoggerName(Object node) {
+ String name = null;
+ if (camelContext.isDebugging() && node instanceof LineNumberAware) {
+ if (node instanceof NamedRoute) {
+ // we want the input from a route as it has the source location / line number
+ node = ((NamedRoute) node).getInput();
+ }
+ String loc = ((LineNumberAware) node).getLocation();
+ int line = ((LineNumberAware) node).getLineNumber();
+ if (line != -1 && loc != null) {
+ // is it a class or file?
+ name = loc;
+ if (loc.contains(":")) {
+ // file based such as xml and yaml
+ name = FileUtil.onlyName(loc);
+ name = FileUtil.stripExt(name);
+ } else {
+ // classname so let us only grab the name
+ int pos = name.lastIndexOf('.');
+ if (pos > 0) {
+ name = name.substring(pos + 1);
+ }
+ }
+ name += ":" + line;
+ }
+ }
+ return name;
+ }
+
+ protected void dumpTrace(String out, Object node) {
+ String name = getLoggerName(node);
+ if (name != null) {
+ Logger log = LoggerFactory.getLogger(name);
+ log.info(out);
+ } else {
+ LOG.info(out);
+ }
}
protected boolean shouldTracePattern(NamedNode definition) {
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java
index f318336..b19c0af 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java
@@ -716,6 +716,7 @@ public class RouteDefinition extends OutputDefinition<RouteDefinition> implement
// Properties
// -----------------------------------------------------------------------
+ @Override
public FromDefinition getInput() {
return input;
}