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 b761831ee19 CAMEL-21522: camel-core - Log EIP allow to use custom log 
language per log EIP
b761831ee19 is described below

commit b761831ee195ef266ea83adbaa8306c4f21147c1
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Sat Dec 7 11:11:19 2024 +0100

    CAMEL-21522: camel-core - Log EIP allow to use custom log language per log 
EIP
---
 .../org/apache/camel/catalog/models/log.json       |  3 +-
 .../apache/camel/catalog/schemas/camel-spring.xsd  | 10 +++++
 .../META-INF/org/apache/camel/model/log.json       |  3 +-
 .../java/org/apache/camel/model/LogDefinition.java | 15 ++++++++
 .../apache/camel/model/ProcessorDefinition.java    | 30 +++++++++++++++
 .../java/org/apache/camel/reifier/LogReifier.java  |  5 ++-
 .../camel/processor/LogCustomLanguageTest.java     | 45 ++++++++++++++++++++++
 .../java/org/apache/camel/xml/in/ModelParser.java  |  1 +
 .../java/org/apache/camel/xml/out/ModelWriter.java |  1 +
 .../org/apache/camel/yaml/out/ModelWriter.java     |  1 +
 .../dsl/yaml/deserializers/ModelDeserializers.java |  6 +++
 .../generated/resources/schema/camelYamlDsl.json   |  5 +++
 12 files changed, 122 insertions(+), 3 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/log.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/log.json
index 60f66060d10..d632049e029 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/log.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/log.json
@@ -19,6 +19,7 @@
     "loggingLevel": { "index": 4, "kind": "attribute", "displayName": "Logging 
Level", "group": "common", "required": false, "type": "enum", "javaType": 
"org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", 
"ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "INFO", "description": "Sets the logging level. The default 
value is INFO" },
     "logName": { "index": 5, "kind": "attribute", "displayName": "Log Name", 
"group": "common", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Sets the name of the logger. The name is default the routeId or 
the source:line if source location is enabled. You can also specify the name 
using tokens: ${class} - the logger class name 
(org.apache.camel.processor.LogProcessor) ${contextId} - the came [...]
     "marker": { "index": 6, "kind": "attribute", "displayName": "Marker", 
"group": "advanced", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "To use slf4j marker" },
-    "logger": { "index": 7, "kind": "attribute", "displayName": "Logger", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.slf4j.Logger", "deprecated": false, "autowired": false, 
"secret": false, "description": "To refer to a custom logger instance to lookup 
from the registry." }
+    "logger": { "index": 7, "kind": "attribute", "displayName": "Logger", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.slf4j.Logger", "deprecated": false, "autowired": false, 
"secret": false, "description": "To refer to a custom logger instance to lookup 
from the registry." },
+    "logLanguage": { "index": 8, "kind": "attribute", "displayName": "Log 
Language", "group": "advanced", "label": "advanced", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "To configure the language to use. By 
default, the simple language is used. However, Camel also supports other 
languages such as groovy." }
   }
 }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
index 893dde753e2..df9ad44e93c 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
@@ -7248,6 +7248,16 @@ To use slf4j marker.
             <xs:documentation xml:lang="en">
 <![CDATA[
 To refer to a custom logger instance to lookup from the registry.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="logLanguage" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+To configure the language to use. By default, the simple language is used. 
However, Camel also supports other languages
+such as groovy.
 ]]>
             </xs:documentation>
           </xs:annotation>
diff --git 
a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/log.json
 
b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/log.json
index 60f66060d10..d632049e029 100644
--- 
a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/log.json
+++ 
b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/log.json
@@ -19,6 +19,7 @@
     "loggingLevel": { "index": 4, "kind": "attribute", "displayName": "Logging 
Level", "group": "common", "required": false, "type": "enum", "javaType": 
"org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", 
"ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "INFO", "description": "Sets the logging level. The default 
value is INFO" },
     "logName": { "index": 5, "kind": "attribute", "displayName": "Log Name", 
"group": "common", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Sets the name of the logger. The name is default the routeId or 
the source:line if source location is enabled. You can also specify the name 
using tokens: ${class} - the logger class name 
(org.apache.camel.processor.LogProcessor) ${contextId} - the came [...]
     "marker": { "index": 6, "kind": "attribute", "displayName": "Marker", 
"group": "advanced", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "To use slf4j marker" },
-    "logger": { "index": 7, "kind": "attribute", "displayName": "Logger", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.slf4j.Logger", "deprecated": false, "autowired": false, 
"secret": false, "description": "To refer to a custom logger instance to lookup 
from the registry." }
+    "logger": { "index": 7, "kind": "attribute", "displayName": "Logger", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.slf4j.Logger", "deprecated": false, "autowired": false, 
"secret": false, "description": "To refer to a custom logger instance to lookup 
from the registry." },
+    "logLanguage": { "index": 8, "kind": "attribute", "displayName": "Log 
Language", "group": "advanced", "label": "advanced", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "To configure the language to use. By 
default, the simple language is used. However, Camel also supports other 
languages such as groovy." }
   }
 }
diff --git 
a/core/camel-core-model/src/main/java/org/apache/camel/model/LogDefinition.java 
b/core/camel-core-model/src/main/java/org/apache/camel/model/LogDefinition.java
index 3d2af9e8b1d..150040a7b63 100644
--- 
a/core/camel-core-model/src/main/java/org/apache/camel/model/LogDefinition.java
+++ 
b/core/camel-core-model/src/main/java/org/apache/camel/model/LogDefinition.java
@@ -49,6 +49,9 @@ public class LogDefinition extends 
NoOutputDefinition<LogDefinition> {
     @XmlAttribute
     @Metadata(label = "advanced", javaType = "org.slf4j.Logger")
     private String logger;
+    @XmlAttribute
+    @Metadata(label = "advanced")
+    private String logLanguage;
 
     public LogDefinition() {
     }
@@ -171,4 +174,16 @@ public class LogDefinition extends 
NoOutputDefinition<LogDefinition> {
     public String getLogger() {
         return logger;
     }
+
+    public String getLogLanguage() {
+        return logLanguage;
+    }
+
+    /**
+     * To configure the language to use. By default, the simple language is 
used. However, Camel also
+     * supports other languages such as groovy.
+     */
+    public void setLogLanguage(String logLanguage) {
+        this.logLanguage = logLanguage;
+    }
 }
diff --git 
a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java
 
b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java
index 6a5ea3e68e5..ab338c9276a 100644
--- 
a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java
+++ 
b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java
@@ -1302,6 +1302,36 @@ public abstract class ProcessorDefinition<Type extends 
ProcessorDefinition<Type>
         return answer.loadBalance(loadBalancer);
     }
 
+    /**
+     * Creates a log message to be logged at INFO level.
+     *
+     * @param logLanguage to use a custom log language such as groovy
+     * @param message     the log message (you can use simple language syntax)
+     * @return            the builder
+     */
+    public Type log(String logLanguage, String message) {
+        LogDefinition answer = new LogDefinition(message);
+        answer.setLogLanguage(logLanguage);
+        addOutput(answer);
+        return asType();
+    }
+
+    /**
+     * Creates a log message to be logged at INFO level.
+     *
+     * @param logLanguage  to use a custom log language such as groovy
+     * @param loggingLevel the logging level to use
+     * @param message      the log message (you can use simple language syntax)
+     * @return             the builder
+     */
+    public Type log(String logLanguage, LoggingLevel loggingLevel, String 
message) {
+        LogDefinition answer = new LogDefinition(message);
+        answer.setLoggingLevel(loggingLevel.name());
+        answer.setLogLanguage(logLanguage);
+        addOutput(answer);
+        return asType();
+    }
+
     /**
      * Creates a log message to be logged at INFO level.
      *
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/LogReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/LogReifier.java
index 55d1afcc81a..61bb3520ee9 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/LogReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/LogReifier.java
@@ -49,7 +49,10 @@ public class LogReifier extends 
ProcessorReifier<LogDefinition> {
         String msg = parseString(definition.getMessage());
 
         // use a custom language
-        String lan = camelContext.getGlobalOption(Exchange.LOG_EIP_LANGUAGE);
+        String lan = parseString(definition.getLogLanguage());
+        if (lan == null) {
+            lan = camelContext.getGlobalOption(Exchange.LOG_EIP_LANGUAGE);
+        }
 
         // use simple language for the message string to give it more power
         Expression exp = null;
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/processor/LogCustomLanguageTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/processor/LogCustomLanguageTest.java
new file mode 100644
index 00000000000..504709f27ae
--- /dev/null
+++ 
b/core/camel-core/src/test/java/org/apache/camel/processor/LogCustomLanguageTest.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.processor;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Test;
+
+public class LogCustomLanguageTest extends ContextTestSupport {
+
+    @Test
+    public void tesCustomLanguage() throws Exception {
+        MockEndpoint mock = context.getEndpoint("mock:foo", 
MockEndpoint.class);
+        mock.expectedMessageCount(1);
+
+        template.sendBody("direct:start", "Hello World");
+
+        mock.assertIsSatisfied();
+    }
+
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:start").log("constant", "Hello 
${body}").to("mock:foo");
+            }
+        };
+    }
+
+}
diff --git 
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java 
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
index a95ec38f1f2..53fcda52bfd 100644
--- 
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
+++ 
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
@@ -485,6 +485,7 @@ public class ModelParser extends BaseParser {
     }
     protected LogDefinition doParseLogDefinition() throws IOException, 
XmlPullParserException {
         return doParse(new LogDefinition(), (def, key, val) -> switch (key) {
+                case "logLanguage": def.setLogLanguage(val); yield true;
                 case "logName": def.setLogName(val); yield true;
                 case "logger": def.setLogger(val); yield true;
                 case "loggingLevel": def.setLoggingLevel(val); yield true;
diff --git 
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
 
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
index caa1155adc9..11ae40c21f2 100644
--- 
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
+++ 
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
@@ -1128,6 +1128,7 @@ public class ModelWriter extends BaseWriter {
         startElement(name);
         doWriteProcessorDefinitionAttributes(def);
         doWriteAttribute("logName", def.getLogName(), null);
+        doWriteAttribute("logLanguage", def.getLogLanguage(), null);
         doWriteAttribute("marker", def.getMarker(), null);
         doWriteAttribute("logger", def.getLogger(), null);
         doWriteAttribute("message", def.getMessage(), null);
diff --git 
a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
 
b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
index 784826c6a45..6592a3d963e 100644
--- 
a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
+++ 
b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
@@ -1128,6 +1128,7 @@ public class ModelWriter extends BaseWriter {
         startElement(name);
         doWriteProcessorDefinitionAttributes(def);
         doWriteAttribute("logName", def.getLogName(), null);
+        doWriteAttribute("logLanguage", def.getLogLanguage(), null);
         doWriteAttribute("marker", def.getMarker(), null);
         doWriteAttribute("logger", def.getLogger(), null);
         doWriteAttribute("message", def.getMessage(), null);
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
index 07485f4f5a5..252639a34ec 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
@@ -9528,6 +9528,7 @@ public final class ModelDeserializers extends 
YamlDeserializerSupport {
                     @YamlProperty(name = "disabled", type = "boolean", 
description = "Whether to disable this EIP from the route during build time. 
Once an EIP has been disabled then it cannot be enabled later at runtime.", 
displayName = "Disabled"),
                     @YamlProperty(name = "id", type = "string", description = 
"Sets the id of this node", displayName = "Id"),
                     @YamlProperty(name = "inheritErrorHandler", type = 
"boolean"),
+                    @YamlProperty(name = "logLanguage", type = "string", 
description = "To configure the language to use. By default, the simple 
language is used. However, Camel also supports other languages such as 
groovy.", displayName = "Log Language"),
                     @YamlProperty(name = "logName", type = "string", 
description = "Sets the name of the logger. The name is default the routeId or 
the source:line if source location is enabled. You can also specify the name 
using tokens: ${class} - the logger class name 
(org.apache.camel.processor.LogProcessor) ${contextId} - the camel context id 
${routeId} - the route id ${groupId} - the route group id ${nodeId} - the node 
id ${nodePrefixId} - the node prefix id ${source} - the source: [...]
                     @YamlProperty(name = "logger", type = "string", 
description = "To refer to a custom logger instance to lookup from the 
registry.", displayName = "Logger"),
                     @YamlProperty(name = "loggingLevel", type = 
"enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "INFO", description = 
"Sets the logging level. The default value is INFO", displayName = "Logging 
Level"),
@@ -9565,6 +9566,11 @@ public final class ModelDeserializers extends 
YamlDeserializerSupport {
                     
target.setInheritErrorHandler(java.lang.Boolean.valueOf(val));
                     break;
                 }
+                case "logLanguage": {
+                    String val = asText(node);
+                    target.setLogLanguage(val);
+                    break;
+                }
                 case "logName": {
                     String val = asText(node);
                     target.setLogName(val);
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
index aae303a54c0..5d4f5da8ef1 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
@@ -2632,6 +2632,11 @@
               "title" : "Id",
               "description" : "Sets the id of this node"
             },
+            "logLanguage" : {
+              "type" : "string",
+              "title" : "Log Language",
+              "description" : "To configure the language to use. By default, 
the simple language is used. However, Camel also supports other languages such 
as groovy."
+            },
             "logName" : {
               "type" : "string",
               "title" : "Log Name",

Reply via email to