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 3318bdb  CAMEL-17549: log component - Add option to have it use source 
location:line as logger name
3318bdb is described below

commit 3318bdbaa3f954594d8044c303e245a18b1443e7
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue Jan 25 14:51:55 2022 +0100

    CAMEL-17549: log component - Add option to have it use source location:line 
as logger name
---
 .../component/log/LogComponentConfigurer.java      |  6 +++
 .../camel/component/log/LogEndpointConfigurer.java |  6 +++
 .../camel/component/log/LogEndpointUriFactory.java |  3 +-
 .../org/apache/camel/component/log/log.json        |  2 +
 .../apache/camel/component/log/LogComponent.java   | 27 ++++++++++++-
 .../apache/camel/component/log/LogEndpoint.java    | 47 +++++++++++++++++++++-
 .../java/org/apache/camel/LineNumberAware.java     | 11 +++++
 .../java/org/apache/camel/reifier/SendReifier.java | 10 +++--
 .../org/apache/camel/reifier/WireTapReifier.java   |  2 +
 9 files changed, 106 insertions(+), 8 deletions(-)

diff --git 
a/components/camel-log/src/generated/java/org/apache/camel/component/log/LogComponentConfigurer.java
 
b/components/camel-log/src/generated/java/org/apache/camel/component/log/LogComponentConfigurer.java
index 8b2c6a2..6bfc1a0 100644
--- 
a/components/camel-log/src/generated/java/org/apache/camel/component/log/LogComponentConfigurer.java
+++ 
b/components/camel-log/src/generated/java/org/apache/camel/component/log/LogComponentConfigurer.java
@@ -27,6 +27,8 @@ public class LogComponentConfigurer extends 
PropertyConfigurerSupport implements
         case "exchangeFormatter": 
target.setExchangeFormatter(property(camelContext, 
org.apache.camel.spi.ExchangeFormatter.class, value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": 
target.setLazyStartProducer(property(camelContext, boolean.class, value)); 
return true;
+        case "sourcelocationloggername":
+        case "sourceLocationLoggerName": 
target.setSourceLocationLoggerName(property(camelContext, boolean.class, 
value)); return true;
         default: return false;
         }
     }
@@ -45,6 +47,8 @@ public class LogComponentConfigurer extends 
PropertyConfigurerSupport implements
         case "exchangeFormatter": return 
org.apache.camel.spi.ExchangeFormatter.class;
         case "lazystartproducer":
         case "lazyStartProducer": return boolean.class;
+        case "sourcelocationloggername":
+        case "sourceLocationLoggerName": return boolean.class;
         default: return null;
         }
     }
@@ -59,6 +63,8 @@ public class LogComponentConfigurer extends 
PropertyConfigurerSupport implements
         case "exchangeFormatter": return target.getExchangeFormatter();
         case "lazystartproducer":
         case "lazyStartProducer": return target.isLazyStartProducer();
+        case "sourcelocationloggername":
+        case "sourceLocationLoggerName": return 
target.isSourceLocationLoggerName();
         default: return null;
         }
     }
diff --git 
a/components/camel-log/src/generated/java/org/apache/camel/component/log/LogEndpointConfigurer.java
 
b/components/camel-log/src/generated/java/org/apache/camel/component/log/LogEndpointConfigurer.java
index e2a5837..993c787 100644
--- 
a/components/camel-log/src/generated/java/org/apache/camel/component/log/LogEndpointConfigurer.java
+++ 
b/components/camel-log/src/generated/java/org/apache/camel/component/log/LogEndpointConfigurer.java
@@ -71,6 +71,8 @@ public class LogEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "showStreams": target.setShowStreams(property(camelContext, 
boolean.class, value)); return true;
         case "skipbodylineseparator":
         case "skipBodyLineSeparator": 
target.setSkipBodyLineSeparator(property(camelContext, boolean.class, value)); 
return true;
+        case "sourcelocationloggername":
+        case "sourceLocationLoggerName": 
target.setSourceLocationLoggerName(property(camelContext, boolean.class, 
value)); return true;
         case "style": target.setStyle(property(camelContext, 
org.apache.camel.support.processor.DefaultExchangeFormatter.OutputStyle.class, 
value)); return true;
         default: return false;
         }
@@ -129,6 +131,8 @@ public class LogEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "showStreams": return boolean.class;
         case "skipbodylineseparator":
         case "skipBodyLineSeparator": return boolean.class;
+        case "sourcelocationloggername":
+        case "sourceLocationLoggerName": return boolean.class;
         case "style": return 
org.apache.camel.support.processor.DefaultExchangeFormatter.OutputStyle.class;
         default: return null;
         }
@@ -188,6 +192,8 @@ public class LogEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "showStreams": return target.isShowStreams();
         case "skipbodylineseparator":
         case "skipBodyLineSeparator": return target.isSkipBodyLineSeparator();
+        case "sourcelocationloggername":
+        case "sourceLocationLoggerName": return 
target.isSourceLocationLoggerName();
         case "style": return target.getStyle();
         default: return null;
         }
diff --git 
a/components/camel-log/src/generated/java/org/apache/camel/component/log/LogEndpointUriFactory.java
 
b/components/camel-log/src/generated/java/org/apache/camel/component/log/LogEndpointUriFactory.java
index 756b855..9afe548 100644
--- 
a/components/camel-log/src/generated/java/org/apache/camel/component/log/LogEndpointUriFactory.java
+++ 
b/components/camel-log/src/generated/java/org/apache/camel/component/log/LogEndpointUriFactory.java
@@ -21,11 +21,12 @@ public class LogEndpointUriFactory extends 
org.apache.camel.support.component.En
     private static final Set<String> SECRET_PROPERTY_NAMES;
     private static final Set<String> MULTI_VALUE_PREFIXES;
     static {
-        Set<String> props = new HashSet<>(29);
+        Set<String> props = new HashSet<>(30);
         props.add("showProperties");
         props.add("showStreams");
         props.add("showHeaders");
         props.add("showException");
+        props.add("sourceLocationLoggerName");
         props.add("showExchangeId");
         props.add("logMask");
         props.add("groupActiveOnly");
diff --git 
a/components/camel-log/src/generated/resources/org/apache/camel/component/log/log.json
 
b/components/camel-log/src/generated/resources/org/apache/camel/component/log/log.json
index 5e40356..7f84903 100644
--- 
a/components/camel-log/src/generated/resources/org/apache/camel/component/log/log.json
+++ 
b/components/camel-log/src/generated/resources/org/apache/camel/component/log/log.json
@@ -23,6 +23,7 @@
   },
   "componentProperties": {
     "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start 
Producer", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Whether the producer 
should be started lazy (on the first message). By starting lazy you can use 
this to allow CamelContext and routes to startup in situations where a producer 
may otherwise fail during star [...]
+    "sourceLocationLoggerName": { "kind": "property", "displayName": "Source 
Location Logger Name", "group": "producer", "label": "", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "If enabled then 
the source location of where the log endpoint is used in Camel routes, would be 
used as logger name, instead of the given name. However, if the source location 
is disabled or not possi [...]
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired 
Enabled", "group": "advanced", "label": "advanced", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Whether autowiring is 
enabled. This is used for automatic autowiring options (the option must be 
marked as autowired) by looking up in the registry to find if there is a single 
instance of matching type, which t [...]
     "exchangeFormatter": { "kind": "property", "displayName": "Exchange 
Formatter", "group": "advanced", "label": "advanced", "required": false, 
"type": "object", "javaType": "org.apache.camel.spi.ExchangeFormatter", 
"deprecated": false, "autowired": true, "secret": false, "description": "Sets a 
custom ExchangeFormatter to convert the Exchange to a String suitable for 
logging. If not specified, we default to DefaultExchangeFormatter." }
   },
@@ -37,6 +38,7 @@
     "logMask": { "kind": "parameter", "displayName": "Log Mask", "group": 
"producer", "label": "", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"description": "If true, mask sensitive information like password or passphrase 
in the log." },
     "marker": { "kind": "parameter", "displayName": "Marker", "group": 
"producer", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "An optional Marker name to use." },
     "plain": { "kind": "parameter", "displayName": "Plain", "group": 
"producer", "label": "", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "If enabled only the body will be printed 
out" },
+    "sourceLocationLoggerName": { "kind": "parameter", "displayName": "Source 
Location Logger Name", "group": "producer", "label": "", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "If enabled then 
the source location of where the log endpoint is used in Camel routes, would be 
used as logger name, instead of the given name. However, if the source location 
is disabled or not poss [...]
     "exchangeFormatter": { "kind": "parameter", "displayName": "Exchange 
Formatter", "group": "advanced", "label": "advanced", "required": false, 
"type": "object", "javaType": "org.apache.camel.spi.ExchangeFormatter", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use a custom exchange formatter" },
     "maxChars": { "kind": "parameter", "displayName": "Max Chars", "group": 
"formatting", "label": "formatting", "required": false, "type": "integer", 
"javaType": "int", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": 10000, "description": "Limits the number of characters logged 
per line." },
     "multiline": { "kind": "parameter", "displayName": "Multiline", "group": 
"formatting", "label": "formatting", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "If enabled then each information 
is outputted on a newline." },
diff --git 
a/components/camel-log/src/main/java/org/apache/camel/component/log/LogComponent.java
 
b/components/camel-log/src/main/java/org/apache/camel/component/log/LogComponent.java
index 7c06d49..4f0166e 100644
--- 
a/components/camel-log/src/main/java/org/apache/camel/component/log/LogComponent.java
+++ 
b/components/camel-log/src/main/java/org/apache/camel/component/log/LogComponent.java
@@ -29,6 +29,8 @@ import 
org.apache.camel.support.processor.DefaultExchangeFormatter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static org.apache.camel.support.LoggerHelper.getLineNumberLoggerName;
+
 /**
  * The <a href="http://camel.apache.org/log.html";>Log Component</a> is for 
logging message exchanges via the underlying
  * logging mechanism.
@@ -42,6 +44,8 @@ public class LogComponent extends DefaultComponent {
 
     @Metadata(label = "advanced", autowired = true)
     private ExchangeFormatter exchangeFormatter;
+    @Metadata
+    private boolean sourceLocationLoggerName;
 
     public LogComponent() {
     }
@@ -76,13 +80,19 @@ public class LogComponent extends DefaultComponent {
 
         LogEndpoint endpoint = new LogEndpoint(uri, this);
         endpoint.setLevel(level.name());
+        endpoint.setSourceLocationLoggerName(sourceLocationLoggerName);
         endpoint.setExchangeFormatter(logFormatter);
+        setProperties(endpoint, parameters);
+
         if (providedLogger == null) {
-            endpoint.setLoggerName(remaining);
+            String loggerName = endpoint.isSourceLocationLoggerName() ? 
getLineNumberLoggerName(endpoint) : null;
+            if (loggerName == null) {
+                loggerName = remaining;
+            }
+            endpoint.setLoggerName(loggerName);
         } else {
             endpoint.setProvidedLogger(providedLogger);
         }
-        setProperties(endpoint, parameters);
 
         return endpoint;
     }
@@ -122,6 +132,19 @@ public class LogComponent extends DefaultComponent {
         this.exchangeFormatter = exchangeFormatter;
     }
 
+    public boolean isSourceLocationLoggerName() {
+        return sourceLocationLoggerName;
+    }
+
+    /**
+     * If enabled then the source location of where the log endpoint is used 
in Camel routes, would be used as logger
+     * name, instead of the given name. However, if the source location is 
disabled or not possible to resolve then the
+     * existing logger name will be used.
+     */
+    public void setSourceLocationLoggerName(boolean sourceLocationLoggerName) {
+        this.sourceLocationLoggerName = sourceLocationLoggerName;
+    }
+
     /**
      * Gets the default shared exchange formatter.
      */
diff --git 
a/components/camel-log/src/main/java/org/apache/camel/component/log/LogEndpoint.java
 
b/components/camel-log/src/main/java/org/apache/camel/component/log/LogEndpoint.java
index 6df0b1d..16d8977 100644
--- 
a/components/camel-log/src/main/java/org/apache/camel/component/log/LogEndpoint.java
+++ 
b/components/camel-log/src/main/java/org/apache/camel/component/log/LogEndpoint.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.log;
 import org.apache.camel.Category;
 import org.apache.camel.Component;
 import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.LineNumberAware;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
@@ -37,6 +38,8 @@ import org.apache.camel.support.processor.ThroughputLogger;
 import org.apache.camel.support.service.ServiceHelper;
 import org.slf4j.Logger;
 
+import static org.apache.camel.support.LoggerHelper.getLineNumberLoggerName;
+
 /**
  * Log messages to the underlying logging mechanism.
  *
@@ -44,11 +47,13 @@ import org.slf4j.Logger;
  */
 @UriEndpoint(firstVersion = "1.1.0", scheme = "log", title = "Log",
              syntax = "log:loggerName", producerOnly = true, category = { 
Category.CORE, Category.MONITORING })
-public class LogEndpoint extends ProcessorEndpoint {
+public class LogEndpoint extends ProcessorEndpoint implements LineNumberAware {
 
     private volatile Processor logger;
     private Logger providedLogger;
     private ExchangeFormatter localFormatter;
+    private int lineNumber;
+    private String location;
 
     @UriPath(description = "Name of the logging category to use")
     @Metadata(required = true)
@@ -120,6 +125,9 @@ public class LogEndpoint extends ProcessorEndpoint {
     private DefaultExchangeFormatter.OutputStyle style = 
DefaultExchangeFormatter.OutputStyle.Default;
     @UriParam(defaultValue = "false", description = "If enabled only the body 
will be printed out")
     private boolean plain;
+    @UriParam(description = "If enabled then the source location of where the 
log endpoint is used in Camel routes, would be used as logger name, instead"
+                            + " of the given name. However, if the source 
location is disabled or not possible to resolve then the existing logger name 
will be used.")
+    private boolean sourceLocationLoggerName;
 
     public LogEndpoint() {
     }
@@ -194,6 +202,26 @@ public class LogEndpoint extends ProcessorEndpoint {
         ServiceHelper.stopService(logger);
     }
 
+    @Override
+    public int getLineNumber() {
+        return lineNumber;
+    }
+
+    @Override
+    public void setLineNumber(int lineNumber) {
+        this.lineNumber = lineNumber;
+    }
+
+    @Override
+    public String getLocation() {
+        return location;
+    }
+
+    @Override
+    public void setLocation(String location) {
+        this.location = location;
+    }
+
     public void setLogger(Processor logger) {
         this.logger = logger;
         // the logger is the processor
@@ -236,7 +264,14 @@ public class LogEndpoint extends ProcessorEndpoint {
             loggingLevel = LoggingLevel.valueOf(level);
         }
         if (providedLogger == null) {
-            camelLogger = new CamelLogger(loggerName, loggingLevel, 
getMarker());
+            String name = loggerName;
+            if (sourceLocationLoggerName) {
+                name = getLineNumberLoggerName(this);
+                if (name == null) {
+                    loggerName = name;
+                }
+            }
+            camelLogger = new CamelLogger(name, loggingLevel, getMarker());
         } else {
             camelLogger = new CamelLogger(providedLogger, loggingLevel, 
getMarker());
         }
@@ -553,4 +588,12 @@ public class LogEndpoint extends ProcessorEndpoint {
     public void setPlain(boolean plain) {
         this.plain = plain;
     }
+
+    public boolean isSourceLocationLoggerName() {
+        return sourceLocationLoggerName;
+    }
+
+    public void setSourceLocationLoggerName(boolean sourceLocationLoggerName) {
+        this.sourceLocationLoggerName = sourceLocationLoggerName;
+    }
 }
diff --git a/core/camel-api/src/main/java/org/apache/camel/LineNumberAware.java 
b/core/camel-api/src/main/java/org/apache/camel/LineNumberAware.java
index 941b3e5..100f687 100644
--- a/core/camel-api/src/main/java/org/apache/camel/LineNumberAware.java
+++ b/core/camel-api/src/main/java/org/apache/camel/LineNumberAware.java
@@ -46,4 +46,15 @@ public interface LineNumberAware {
      */
     void setLocation(String location);
 
+    /**
+     * Set the {@link LineNumberAware} if the object is an instance of {@link 
LineNumberAware}.
+     */
+    static <T> T trySetLineNumberAware(T object, LineNumberAware source) {
+        if (source != null && object instanceof LineNumberAware) {
+            ((LineNumberAware) object).setLineNumber(source.getLineNumber());
+            ((LineNumberAware) object).setLocation(source.getLocation());
+        }
+        return object;
+    }
+
 }
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SendReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SendReifier.java
index f5a3051..3f6f4b1 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SendReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SendReifier.java
@@ -18,6 +18,7 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.LineNumberAware;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
@@ -38,15 +39,18 @@ public class SendReifier extends 
ProcessorReifier<SendDefinition<?>> {
     }
 
     public Endpoint resolveEndpoint() {
+        Endpoint answer;
         if (definition.getEndpoint() == null) {
             if (definition.getEndpointProducerBuilder() == null) {
-                return CamelContextHelper.resolveEndpoint(camelContext, 
definition.getEndpointUri(), null);
+                answer = CamelContextHelper.resolveEndpoint(camelContext, 
definition.getEndpointUri(), null);
             } else {
-                return 
definition.getEndpointProducerBuilder().resolve(camelContext);
+                answer = 
definition.getEndpointProducerBuilder().resolve(camelContext);
             }
         } else {
-            return definition.getEndpoint();
+            answer = definition.getEndpoint();
         }
+        LineNumberAware.trySetLineNumberAware(answer, definition);
+        return answer;
     }
 
 }
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java
index c43c592..4c8bc70 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java
@@ -23,6 +23,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Expression;
 import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.LineNumberAware;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
@@ -77,6 +78,7 @@ public class WireTapReifier extends 
ToDynamicReifier<WireTapDefinition<?>> {
         } else {
             // static so we can use a plain send processor
             Endpoint endpoint = 
CamelContextHelper.resolveEndpoint(camelContext, uri, null);
+            LineNumberAware.trySetLineNumberAware(endpoint, definition);
             sendProcessor = new SendProcessor(endpoint);
         }
 

Reply via email to