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 <[email protected]>
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",