This is an automated email from the ASF dual-hosted git repository.

sdanilov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new b06f549274 IGNITE-17568 Improve logging in CLI (#1105)
b06f549274 is described below

commit b06f549274ceaf9daa7f2bfabfe26eaf9787fd23
Author: Vadim Pakhnushev <[email protected]>
AuthorDate: Wed Sep 21 13:19:33 2022 +0300

    IGNITE-17568 Improve logging in CLI (#1105)
---
 .../java/org/apache/ignite/internal/cli/Main.java  | 53 ++++++++++++++++------
 .../internal/cli/config/ConfigConstants.java       |  5 ++
 2 files changed, 45 insertions(+), 13 deletions(-)

diff --git a/modules/cli/src/main/java/org/apache/ignite/internal/cli/Main.java 
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/Main.java
index e99b5590b9..a90f0b22eb 100644
--- a/modules/cli/src/main/java/org/apache/ignite/internal/cli/Main.java
+++ b/modules/cli/src/main/java/org/apache/ignite/internal/cli/Main.java
@@ -17,19 +17,21 @@
 
 package org.apache.ignite.internal.cli;
 
+import static 
org.apache.ignite.internal.cli.config.ConfigConstants.IGNITE_CLI_LOGS_DIR;
+
 import io.micronaut.configuration.picocli.MicronautFactory;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.StandardCopyOption;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.logging.LogManager;
 import java.util.stream.Collectors;
 import org.apache.ignite.internal.cli.commands.TopLevelCliCommand;
 import org.apache.ignite.internal.cli.commands.TopLevelCliReplCommand;
 import 
org.apache.ignite.internal.cli.commands.questions.ConnectToClusterQuestion;
 import org.apache.ignite.internal.cli.config.ConfigDefaultValueProvider;
+import org.apache.ignite.internal.cli.config.StateFolderProvider;
 import org.apache.ignite.internal.cli.core.call.CallExecutionPipeline;
 import org.apache.ignite.internal.cli.core.call.StringCallInput;
 import 
org.apache.ignite.internal.cli.core.exception.handler.DefaultExceptionHandlers;
@@ -155,20 +157,45 @@ public class Main {
     private static void initJavaLoggerProps() {
         InputStream propsFile = 
Main.class.getResourceAsStream("/cli.java.util.logging.properties");
 
-        Path props = null;
-
-        try {
-            props = Files.createTempFile("cli.java.util.logging.properties", 
"");
+        if (propsFile != null) {
+            try {
+                LogManager.getLogManager().updateConfiguration(propsFile, s -> 
{
+                    // Merge default configuration with configuration read 
from propsFile
+                    // and append the path to logs to the file pattern if 
propsFile have the corresponding key
+                    if (s.equals("java.util.logging.FileHandler.pattern")) {
+                        return (o, n) -> {
+                            if (n == null) {
+                                return o;
+                            }
+                            try {
+                                return getLogsDir() + "/" + n;
+                            } catch (IOException e) {
+                                return n;
+                            }
+                        };
+                    }
+                    return (o, n) -> n == null ? o : n;
+                });
+            } catch (IOException ignored) {
+                // No-op.
+            }
+        }
+    }
 
-            if (propsFile != null) {
-                Files.copy(propsFile, props.toAbsolutePath(), 
StandardCopyOption.REPLACE_EXISTING);
+    private static String getLogsDir() throws IOException {
+        String envLogsDir = System.getenv(IGNITE_CLI_LOGS_DIR);
+        String logsDir = envLogsDir != null ? envLogsDir : 
StateFolderProvider.getStateFile("logs").getAbsolutePath();
+        File logsDirFile = new File(logsDir);
+        if (!logsDirFile.exists()) {
+            if (!logsDirFile.mkdirs()) {
+                throw new IOException("Failed to create directory " + logsDir);
             }
-        } catch (IOException ignored) {
-            // No-op.
         }
 
-        if (props != null) {
-            System.setProperty("java.util.logging.config.file", 
props.toString());
+        if (logsDirFile.isDirectory()) {
+            return logsDir;
+        } else {
+            throw new IOException(logsDir + " is not a directory");
         }
     }
 }
diff --git 
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ConfigConstants.java
 
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ConfigConstants.java
index 78e1320b30..3ded73b0c3 100644
--- 
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ConfigConstants.java
+++ 
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ConfigConstants.java
@@ -44,6 +44,11 @@ public final class ConfigConstants {
      */
     private static final String IGNITE_CLI_CONFIG_FILE = 
"IGNITE_CLI_CONFIG_FILE";
 
+    /**
+     * Environment variable which points to the CLI logs folder.
+     */
+    public static final String IGNITE_CLI_LOGS_DIR = "IGNITE_CLI_LOGS_DIR";
+
     /**
      * Current profile property name.
      */

Reply via email to