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

commit d8b3e25f8fb207ea36f4c8e64070174771b533ce
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Jan 4 15:11:24 2023 +0100

    CAMEL-18538: camel-jbang - Run logs to both console and file
---
 .../org/apache/camel/dsl/jbang/core/commands/Run.java     | 14 ++++++++++++++
 .../apache/camel/dsl/jbang/core/common/RuntimeUtil.java   | 11 +++++++++++
 .../camel-jbang-core/src/main/resources/log4j2.properties | 15 +++++++++++++--
 3 files changed, 38 insertions(+), 2 deletions(-)

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 dd59b5d4eb5..e36ef14c9ad 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
@@ -93,6 +93,8 @@ class Run extends CamelCommand {
     private boolean silentRun;
     private boolean pipeRun;
 
+    private File logFile;
+
     //CHECKSTYLE:OFF
     @Parameters(description = "The Camel file(s) to run. If no files specified 
then application.properties is used as source for which files to run.",
             arity = "0..9", paramLabel = "<files>", parameterConsumer = 
FilesConsumer.class)
@@ -560,6 +562,11 @@ class Run extends CamelCommand {
         main.start();
         main.run();
 
+        // cleanup and delete log file
+        if (logFile != null) {
+            FileUtil.deleteFile(logFile);
+        }
+
         return main.getExitCode();
     }
 
@@ -701,6 +708,13 @@ class Run extends CamelCommand {
             writeSettings("loggingLevel", loggingLevel);
             writeSettings("loggingColor", loggingColor ? "true" : "false");
             writeSettings("loggingJson", loggingJson ? "true" : "false");
+            if (!pipeRun) {
+                // remember log file
+                File dir = new File(System.getProperty("user.home"), ".camel");
+                String name = RuntimeUtil.getPid() + ".log";
+                logFile = new File(dir, name);
+                logFile.deleteOnExit();
+            }
         } else {
             RuntimeUtil.configureLog("off", false, false, false, false);
             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 edd832c98f8..4dc5f495950 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
@@ -34,6 +34,9 @@ public final class RuntimeUtil {
 
     public static void configureLog(String level, boolean color, boolean json, 
boolean pipe, boolean export) {
         if (INIT_DONE.compareAndSet(false, true)) {
+            long pid = ProcessHandle.current().pid();
+            System.setProperty("pid", "" + pid);
+
             if (export) {
                 Configurator.initialize("CamelJBang", 
"log4j2-export.properties");
             } else if (pipe) {
@@ -99,4 +102,12 @@ public final class RuntimeUtil {
         return deps;
     }
 
+    public static String getPid() {
+        try {
+            return "" + ProcessHandle.current().pid();
+        } catch (Throwable e) {
+            return null;
+        }
+    }
+
 }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/resources/log4j2.properties 
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/log4j2.properties
index bd77ce59db0..e92faa54332 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/log4j2.properties
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/log4j2.properties
@@ -15,13 +15,24 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 
+# console logger
 appender.stdout.type = Console
 appender.stdout.name = out
 appender.stdout.layout.type = PatternLayout
-
 # logging style that is similar to spring boot
 appender.stdout.layout.pattern = %style{%d{yyyy-MM-dd HH:mm:ss.SSS}}{Dim} 
%highlight{%5p} %style{%pid}{Magenta} %style{---}{Dim} %style{[%15.15t]}{Dim} 
%style{%-40.40c}{Cyan} : %m%n
 
+# file logger
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = ${sys:user.home}/.camel/${sys:pid}.log
+appender.file.createOnDemand = true
+appender.file.append = false
+appender.file.layout.type = PatternLayout
+# logging style that is similar to spring boot (no color)
+appender.file.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %5p %pid --- 
[%15.15t] %-40.40c : %m%n
+
+# log to console and file
+rootLogger = INFO,out,file
 rootLogger.level = INFO
-rootLogger.appenderRef.out.ref = out
 

Reply via email to