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",