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 2024/04/29 09:45:39 UTC
(camel) 01/02: CAMEL-20721: camel-jbang - Make it possible to set logging-level per package individually from CLI
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch jbang-log
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 2b1018e152fca86b047606a42a14fe29286b91fc
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Apr 29 11:39:33 2024 +0200
CAMEL-20721: camel-jbang - Make it possible to set logging-level per package individually from CLI
---
.../dsl/jbang/core/commands/CamelCommand.java | 4 +-
.../dsl/jbang/core/commands/ExportBaseCommand.java | 4 +-
.../apache/camel/dsl/jbang/core/commands/Run.java | 32 ++++++++++-
.../camel/dsl/jbang/core/common/RuntimeUtil.java | 66 ++++++++++++++++++----
4 files changed, 89 insertions(+), 17 deletions(-)
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelCommand.java
index ddbafad01f1..40ed1be0e41 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelCommand.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelCommand.java
@@ -52,8 +52,8 @@ public abstract class CamelCommand implements Callable<Integer> {
return main;
}
- protected void configureLoggingOff() {
- RuntimeUtil.configureLog("off", false, false, false, false, null);
+ protected void configureLoggingOff() throws Exception {
+ RuntimeUtil.configureLog("off", false, false, false, false, null, null);
}
protected boolean disarrangeLogging() {
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
index 24f0803d95c..a3df4f79217 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
@@ -227,9 +227,9 @@ abstract class ExportBaseCommand extends CamelCommand {
public Integer doCall() throws Exception {
// configure logging first
if (logging) {
- RuntimeUtil.configureLog(loggingLevel, false, false, false, true, null);
+ RuntimeUtil.configureLog(loggingLevel, false, false, false, true, null, null);
} else {
- RuntimeUtil.configureLog("off", false, false, false, true, null);
+ RuntimeUtil.configureLog("off", false, false, false, true, null, null);
}
if (!quiet) {
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index 795b6ae8f5a..c27923ca164 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -215,6 +215,9 @@ public class Run extends CamelCommand {
@Option(names = { "--logging-config-path" }, description = "Path to file with custom logging configuration")
String loggingConfigPath;
+ @Option(names = { "--logging-category" }, description = "Used for individual logging levels (ex: org.apache.kafka=DEBUG)")
+ List<String> loggingCategory = new ArrayList<>();
+
@Option(names = { "--max-messages" }, defaultValue = "0", description = "Max number of messages to process before stopping")
int maxMessages;
@@ -1430,11 +1433,34 @@ public class Run extends CamelCommand {
return main;
}
- private void configureLogging() {
+ private void configureLogging() throws Exception {
if (silentRun) {
// do not configure logging
} else if (logging) {
- RuntimeUtil.configureLog(loggingLevel, loggingColor, loggingJson, scriptRun, false, loggingConfigPath);
+ // allow to configure individual logging levels in application.properties
+ Properties prop = loadProfileProperties();
+ if (prop != null) {
+ for (Object obj : prop.keySet()) {
+ String key = obj.toString();
+ String value = prop.getProperty(key);
+ if (key.startsWith("logging.level.")) {
+ key = key.substring(14);
+ } else if (key.startsWith("quarkus.log.category.")) {
+ key = key.substring(21);
+ if (key.endsWith(".level")) {
+ key = key.substring(0, key.length() - 6);
+ }
+ }
+ key = StringHelper.removeLeadingAndEndingQuotes(key);
+ String line = key + "=" + value;
+ String line2 = key + " = " + value;
+ if (!loggingCategory.contains(line) && !loggingCategory.contains(line2)) {
+ loggingCategory.add(line);
+ }
+ }
+ }
+ RuntimeUtil.configureLog(loggingLevel, loggingColor, loggingJson, scriptRun, false, loggingConfigPath,
+ loggingCategory);
writeSettings("loggingLevel", loggingLevel);
writeSettings("loggingColor", loggingColor ? "true" : "false");
writeSettings("loggingJson", loggingJson ? "true" : "false");
@@ -1445,7 +1471,7 @@ public class Run extends CamelCommand {
logFile.deleteOnExit();
}
} else {
- RuntimeUtil.configureLog("off", false, false, false, false, null);
+ RuntimeUtil.configureLog("off", false, false, false, false, null, null);
writeSettings("loggingLevel", "off");
}
}
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeUtil.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeUtil.java
index 41b8371a405..ca44f91652a 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeUtil.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeUtil.java
@@ -19,15 +19,20 @@ package org.apache.camel.dsl.jbang.core.common;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.StringReader;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
+import java.util.StringJoiner;
import java.util.concurrent.atomic.AtomicBoolean;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.OrderedProperties;
+import org.apache.camel.util.StringHelper;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.config.Configurator;
@@ -39,23 +44,64 @@ public final class RuntimeUtil {
}
public static void configureLog(
- String level, boolean color, boolean json, boolean script, boolean export, String loggingConfigPath) {
+ String level, boolean color, boolean json, boolean script, boolean export, String loggingConfigPath,
+ List<String> loggingCategories)
+ throws Exception {
if (INIT_DONE.compareAndSet(false, true)) {
long pid = ProcessHandle.current().pid();
System.setProperty("pid", Long.toString(pid));
if (loggingConfigPath != null) {
+ // ust custom logging configuration as-is
Configurator.initialize("CamelJBang", "file://" + Path.of(loggingConfigPath).toAbsolutePath());
- } else if (export) {
- Configurator.initialize("CamelJBang", "log4j2-export.properties");
- } else if (script) {
- Configurator.initialize("CamelJBang", "log4j2-script.properties");
- } else if (json) {
- Configurator.initialize("CamelJBang", "log4j2-json.properties");
- } else if (color) {
- Configurator.initialize("CamelJBang", "log4j2.properties");
+ } else if (loggingCategories != null && !loggingCategories.isEmpty()) {
+ // enrich logging file with custom logging categories
+ String name = "log4j2-no-color.properties";
+ if (export) {
+ name = "log4j2-export.properties";
+ } else if (script) {
+ name = "log4j2-export.properties";
+ } else if (json) {
+ name = "log4j2-export.properties";
+ } else if (color) {
+ name = "log4j2.properties";
+ }
+ InputStream is = RuntimeUtil.class.getClassLoader().getResourceAsStream(name);
+ String content = IOHelper.loadText(is);
+ IOHelper.close(is);
+
+ StringJoiner sj = new StringJoiner(System.lineSeparator());
+ int i = 0;
+ for (String lc : loggingCategories) {
+ String prefix = "custom" + i++;
+ String catName = StringHelper.before(lc, "=", "").trim();
+ String catLevel = StringHelper.after(lc, "=", "").trim();
+ if (!catName.isEmpty() && !catLevel.isEmpty()) {
+ sj.add("logger." + prefix + ".name=" + catName);
+ sj.add("logger." + prefix + ".level=" + catLevel);
+ sj.add("logger." + prefix + ".appenderRef.$1.ref=out");
+ sj.add("logger." + prefix + ".appenderRef.$2.ref=file");
+ }
+ }
+ content = content + System.lineSeparator() + sj;
+
+ name = CommandLineHelper.CAMEL_JBANG_WORK_DIR + "/log4j2.properties";
+ Files.writeString(Paths.get(name), content);
+
+ Configurator.initialize("CamelJBang", "file://" + Path.of(name).toAbsolutePath());
} else {
- Configurator.initialize("CamelJBang", "log4j2-no-color.properties");
+ // use out of the box logging configuration
+ if (export) {
+ Configurator.initialize("CamelJBang", "log4j2-export.properties");
+ } else if (script) {
+ Configurator.initialize("CamelJBang", "log4j2-script.properties");
+ } else if (json) {
+ Configurator.initialize("CamelJBang", "log4j2-json.properties");
+ } else if (color) {
+ Configurator.initialize("CamelJBang", "log4j2.properties");
+ } else {
+ Configurator.initialize("CamelJBang", "log4j2-no-color.properties");
+ }
}
}