You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ni...@apache.org on 2021/03/31 07:19:25 UTC

[ignite] branch ignite-cdc updated: IGNITE-14353 Ability to specify postfix for IgniteLogger instead of nodeId (#8923)

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

nizhikov pushed a commit to branch ignite-cdc
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/ignite-cdc by this push:
     new f590a18  IGNITE-14353 Ability to specify postfix for IgniteLogger instead of nodeId (#8923)
f590a18 is described below

commit f590a18b1379923852b6761de6b4951acf50a6ab
Author: Nikolay <ni...@apache.org>
AuthorDate: Wed Mar 31 10:19:06 2021 +0300

    IGNITE-14353 Ability to specify postfix for IgniteLogger instead of nodeId (#8923)
---
 .../org/apache/ignite/internal/IgnitionEx.java     | 24 ++++++++++++++++---
 .../apache/ignite/internal/util/IgniteUtils.java   | 14 +++++------
 .../apache/ignite/logger/LoggerNodeIdAware.java    |  3 +++
 ...gerNodeIdAware.java => LoggerPostfixAware.java} | 19 ++++-----------
 .../org/apache/ignite/logger/java/JavaLogger.java  | 27 ++++++++++++++++++----
 .../ignite/logger/java/JavaLoggerFileHandler.java  | 11 ++++++++-
 .../apache/ignite/logger/java/JavaLoggerTest.java  |  8 +++++--
 .../logger/GridLog4jRollingFileAppender.java       | 27 +++++++++++++---------
 .../junits/logger/GridTestLog4jLogger.java         | 23 ++++++++++--------
 .../apache/ignite/logger/log4j/Log4JLogger.java    | 18 ++++++++++++---
 .../ignite/logger/log4j/Log4jNodeIdFilePath.java   | 15 ++++++------
 .../apache/ignite/logger/log4j2/Log4J2Logger.java  | 19 +++++++++++----
 .../ignite/logger/log4j2/Log4j2LoggerSelfTest.java | 18 +++++++++++----
 13 files changed, 155 insertions(+), 71 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
index 3104269..1f22c4b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
@@ -110,6 +110,7 @@ import org.apache.ignite.lang.IgniteBiInClosure;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.lang.IgniteInClosure;
 import org.apache.ignite.logger.LoggerNodeIdAware;
+import org.apache.ignite.logger.LoggerPostfixAware;
 import org.apache.ignite.logger.java.JavaLogger;
 import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.marshaller.MarshallerUtils;
@@ -2535,9 +2536,22 @@ public class IgnitionEx {
          * @return Initialized logger.
          * @throws IgniteCheckedException If failed.
          */
-        @SuppressWarnings("ErrorNotRethrown")
         private IgniteLogger initLogger(@Nullable IgniteLogger cfgLog, UUID nodeId, String workDir)
             throws IgniteCheckedException {
+            return initLogger(cfgLog, nodeId, null, workDir);
+        }
+
+        /**
+         * @param cfgLog Configured logger.
+         * @param nodeId Local node ID.
+         * @param postfix Log file postfix.
+         * @param workDir Work directory.
+         * @return Initialized logger.
+         * @throws IgniteCheckedException If failed.
+         */
+        @SuppressWarnings("ErrorNotRethrown")
+        public IgniteLogger initLogger(@Nullable IgniteLogger cfgLog, UUID nodeId, String postfix, String workDir)
+            throws IgniteCheckedException {
             try {
                 Exception log4jInitErr = null;
 
@@ -2600,8 +2614,12 @@ public class IgnitionEx {
                     ((JavaLogger)cfgLog).setWorkDirectory(workDir);
 
                 // Set node IDs for all file appenders.
-                if (cfgLog instanceof LoggerNodeIdAware)
-                    ((LoggerNodeIdAware)cfgLog).setNodeId(nodeId);
+                if (cfgLog instanceof LoggerNodeIdAware) {
+                    if (nodeId == null && cfgLog instanceof LoggerPostfixAware)
+                        ((LoggerPostfixAware)cfgLog).setPostfix(postfix);
+                    else
+                        ((LoggerNodeIdAware)cfgLog).setNodeId(nodeId);
+                }
 
                 if (log4jInitErr != null)
                     U.warn(cfgLog, "Failed to initialize Log4JLogger (falling back to standard java logging): "
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index 61dba92..b0e24bb 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -8826,15 +8826,15 @@ public abstract class IgniteUtils {
     }
 
     /**
-     * Attaches node ID to log file name.
+     * Attaches postfix to log file name.
      *
-     * @param nodeId Node ID.
+     * @param postfix Postfix.
      * @param fileName File name.
-     * @return File name with node ID.
+     * @return File name with postfix.
      */
     @SuppressWarnings("IfMayBeConditional")
-    public static String nodeIdLogFileName(UUID nodeId, String fileName) {
-        assert nodeId != null;
+    public static String logFileName(String postfix, String fileName) {
+        assert postfix != null;
         assert fileName != null;
 
         fileName = GridFilenameUtils.separatorsToSystem(fileName);
@@ -8842,9 +8842,9 @@ public abstract class IgniteUtils {
         int dot = fileName.lastIndexOf('.');
 
         if (dot < 0 || dot == fileName.length() - 1)
-            return fileName + '-' + U.id8(nodeId);
+            return fileName + '-' + postfix;
         else
-            return fileName.substring(0, dot) + '-' + U.id8(nodeId) + fileName.substring(dot);
+            return fileName.substring(0, dot) + '-' + postfix + fileName.substring(dot);
     }
 
     /**
diff --git a/modules/core/src/main/java/org/apache/ignite/logger/LoggerNodeIdAware.java b/modules/core/src/main/java/org/apache/ignite/logger/LoggerNodeIdAware.java
index 492d93c..16c5125 100644
--- a/modules/core/src/main/java/org/apache/ignite/logger/LoggerNodeIdAware.java
+++ b/modules/core/src/main/java/org/apache/ignite/logger/LoggerNodeIdAware.java
@@ -21,7 +21,10 @@ import java.util.UUID;
 
 /**
  * Interface for Ignite file appenders to attach node ID to log file names.
+ *
+ * @deprecated Use {@link LoggerPostfixAware} instead.
  */
+@Deprecated
 public interface LoggerNodeIdAware {
     /**
      * Sets node ID.
diff --git a/modules/core/src/main/java/org/apache/ignite/logger/LoggerNodeIdAware.java b/modules/core/src/main/java/org/apache/ignite/logger/LoggerPostfixAware.java
similarity index 73%
copy from modules/core/src/main/java/org/apache/ignite/logger/LoggerNodeIdAware.java
copy to modules/core/src/main/java/org/apache/ignite/logger/LoggerPostfixAware.java
index 492d93c..cb86621 100644
--- a/modules/core/src/main/java/org/apache/ignite/logger/LoggerNodeIdAware.java
+++ b/modules/core/src/main/java/org/apache/ignite/logger/LoggerPostfixAware.java
@@ -17,23 +17,14 @@
 
 package org.apache.ignite.logger;
 
-import java.util.UUID;
-
 /**
- * Interface for Ignite file appenders to attach node ID to log file names.
+ * Interface for Ignite file appenders to attach postfix to log file names.
  */
-public interface LoggerNodeIdAware {
-    /**
-     * Sets node ID.
-     *
-     * @param nodeId Node ID.
-     */
-    public void setNodeId(UUID nodeId);
-
+public interface LoggerPostfixAware extends LoggerNodeIdAware {
     /**
-     * Gets node ID.
+     * Sets postfix.
      *
-     * @return Node ID.
+     * @param postfix Postfix.
      */
-    public UUID getNodeId();
+    public void setPostfix(String postfix);
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLogger.java b/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLogger.java
index c82f01d..89dc707 100644
--- a/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLogger.java
+++ b/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLogger.java
@@ -34,7 +34,7 @@ import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.A;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.logger.LoggerNodeIdAware;
+import org.apache.ignite.logger.LoggerPostfixAware;
 import org.jetbrains.annotations.Nullable;
 
 import static java.util.logging.Level.FINE;
@@ -95,7 +95,7 @@ import static org.apache.ignite.IgniteSystemProperties.IGNITE_QUIET;
  * logger in your task/job code. See {@link org.apache.ignite.resources.LoggerResource} annotation about logger
  * injection.
  */
-public class JavaLogger implements IgniteLogger, LoggerNodeIdAware {
+public class JavaLogger implements IgniteLogger, LoggerPostfixAware {
     /** */
     public static final String DFLT_CONFIG_PATH = "config/java.util.logging.properties";
 
@@ -128,6 +128,10 @@ public class JavaLogger implements IgniteLogger, LoggerNodeIdAware {
     @GridToStringExclude
     private volatile UUID nodeId;
 
+    /** Postfix. */
+    @GridToStringExclude
+    private volatile String postfix;
+
     /**
      * Creates new logger.
      */
@@ -368,14 +372,27 @@ public class JavaLogger implements IgniteLogger, LoggerNodeIdAware {
     @Override public void setNodeId(UUID nodeId) {
         A.notNull(nodeId, "nodeId");
 
-        if (this.nodeId != null)
+        postfix(nodeId, U.id8(nodeId));
+    }
+
+    /** {@inheritDoc} */
+    @Override public void setPostfix(String postfix) {
+        A.notNull(postfix, "postfix");
+
+        postfix(null, postfix);
+    }
+
+    /** */
+    private void postfix(UUID nodeId, String postfix) {
+        if (this.postfix != null)
             return;
 
         synchronized (mux) {
             // Double check.
-            if (this.nodeId != null)
+            if (this.postfix != null)
                 return;
 
+            this.postfix = postfix;
             this.nodeId = nodeId;
         }
 
@@ -385,7 +402,7 @@ public class JavaLogger implements IgniteLogger, LoggerNodeIdAware {
             return;
 
         try {
-            fileHnd.nodeId(nodeId, workDir);
+            fileHnd.postfix(postfix, workDir);
         }
         catch (IgniteCheckedException | IOException e) {
             throw new RuntimeException("Failed to enable file handler.", e);
diff --git a/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLoggerFileHandler.java b/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLoggerFileHandler.java
index 6320589..e729441 100644
--- a/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLoggerFileHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLoggerFileHandler.java
@@ -80,6 +80,15 @@ public final class JavaLoggerFileHandler extends StreamHandler {
      * @param nodeId Node id.
      */
     public void nodeId(UUID nodeId, String workDir) throws IgniteCheckedException, IOException {
+        postfix(U.id8(nodeId), workDir);
+    }
+
+    /**
+     * Sets Postfix and instantiates {@link FileHandler} delegate.
+     *
+     * @param postfix Postfix.
+     */
+    public void postfix(String postfix, String workDir) throws IgniteCheckedException, IOException {
         if (delegate != null)
             return;
 
@@ -90,7 +99,7 @@ public final class JavaLoggerFileHandler extends StreamHandler {
         if (ptrn == null)
             ptrn = "ignite-%{id8}.%g.log";
 
-        ptrn = new File(logDirectory(workDir), ptrn.replace("%{id8}", U.id8(nodeId))).getAbsolutePath();
+        ptrn = new File(logDirectory(workDir), ptrn.replace("%{id8}", postfix)).getAbsolutePath();
 
         int limit = getIntProperty(clsName + ".limit", 0);
 
diff --git a/modules/core/src/test/java/org/apache/ignite/logger/java/JavaLoggerTest.java b/modules/core/src/test/java/org/apache/ignite/logger/java/JavaLoggerTest.java
index 4687ca9..dba2650 100644
--- a/modules/core/src/test/java/org/apache/ignite/logger/java/JavaLoggerTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/logger/java/JavaLoggerTest.java
@@ -20,10 +20,11 @@ package org.apache.ignite.logger.java;
 import java.util.UUID;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.logger.LoggerNodeIdAware;
+import org.apache.ignite.logger.LoggerPostfixAware;
 import org.apache.ignite.testframework.junits.common.GridCommonTest;
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 /**
@@ -43,7 +44,10 @@ public class JavaLoggerTest {
         log = new JavaLogger();
 
         ((JavaLogger)log).setWorkDirectory(U.defaultWorkDirectory());
-        ((LoggerNodeIdAware)log).setNodeId(UUID.fromString("00000000-1111-2222-3333-444444444444"));
+        UUID id = UUID.fromString("00000000-1111-2222-3333-444444444444");
+
+        ((LoggerPostfixAware)log).setNodeId(id);
+        assertEquals(id, ((LoggerPostfixAware)log).getNodeId());
 
         System.out.println(log.toString());
 
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/logger/GridLog4jRollingFileAppender.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/logger/GridLog4jRollingFileAppender.java
index fc9f38f..5d73e7c 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/logger/GridLog4jRollingFileAppender.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/logger/GridLog4jRollingFileAppender.java
@@ -23,16 +23,16 @@ import java.util.UUID;
 import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.internal.util.typedef.internal.A;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.logger.LoggerNodeIdAware;
+import org.apache.ignite.logger.LoggerPostfixAware;
 import org.apache.log4j.Layout;
 import org.apache.log4j.RollingFileAppender;
 
 /**
  * Log4J {@link org.apache.log4j.RollingFileAppender} with added support for grid node IDs.
  */
-public class GridLog4jRollingFileAppender extends RollingFileAppender implements LoggerNodeIdAware {
-    /** Node ID. */
-    private UUID nodeId;
+public class GridLog4jRollingFileAppender extends RollingFileAppender implements LoggerPostfixAware {
+    /** Postfix. */
+    private String postfix;
 
     /** Basic log file name. */
     private String baseFileName;
@@ -79,17 +79,22 @@ public class GridLog4jRollingFileAppender extends RollingFileAppender implements
     }
 
     /** {@inheritDoc} */
+    @Override public void setNodeId(UUID nodeId) {
+        setPostfix(U.id8(nodeId));
+    }
+
+    /** {@inheritDoc} */
     @SuppressWarnings("NonPrivateFieldAccessedInSynchronizedContext")
-    @Override public synchronized void setNodeId(UUID nodeId) {
-        A.notNull(nodeId, "nodeId");
+    @Override public synchronized void setPostfix(String postfix) {
+        A.notNull(postfix, "postfix");
 
-        this.nodeId = nodeId;
+        this.postfix = postfix;
 
         if (fileName != null) { // fileName could be null if IGNITE_HOME is not defined.
             if (baseFileName == null)
                 baseFileName = fileName;
 
-            fileName = U.nodeIdLogFileName(nodeId, baseFileName);
+            fileName = U.logFileName(postfix, baseFileName);
         }
         else {
             String tmpDir = IgniteSystemProperties.getString("java.io.tmpdir");
@@ -97,20 +102,20 @@ public class GridLog4jRollingFileAppender extends RollingFileAppender implements
             if (tmpDir != null) {
                 baseFileName = new File(tmpDir, "ignite.log").getAbsolutePath();
 
-                fileName = U.nodeIdLogFileName(nodeId, baseFileName);
+                fileName = U.logFileName(postfix, baseFileName);
             }
         }
     }
 
     /** {@inheritDoc} */
     @Override public synchronized UUID getNodeId() {
-        return nodeId;
+        throw new UnsupportedOperationException("getNodeId");
     }
 
     /** {@inheritDoc} */
     @Override public synchronized void setFile(String fileName, boolean fileAppend, boolean bufIO, int bufSize)
         throws IOException {
-        if (nodeId != null)
+        if (postfix != null)
             super.setFile(fileName, fileAppend, bufIO, bufSize);
     }
 }
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/logger/GridTestLog4jLogger.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/logger/GridTestLog4jLogger.java
index 4464828..65d1654 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/logger/GridTestLog4jLogger.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/logger/GridTestLog4jLogger.java
@@ -33,7 +33,7 @@ import org.apache.ignite.internal.util.typedef.internal.A;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteClosure;
-import org.apache.ignite.logger.LoggerNodeIdAware;
+import org.apache.ignite.logger.LoggerPostfixAware;
 import org.apache.log4j.Appender;
 import org.apache.log4j.Category;
 import org.apache.log4j.ConsoleAppender;
@@ -77,7 +77,7 @@ import static org.apache.ignite.IgniteSystemProperties.IGNITE_QUIET;
  * logger in your task/job code. See {@link org.apache.ignite.resources.LoggerResource} annotation about logger
  * injection.
  */
-public class GridTestLog4jLogger implements IgniteLogger, LoggerNodeIdAware {
+public class GridTestLog4jLogger implements IgniteLogger, LoggerPostfixAware {
     /** Appenders. */
     private static Collection<FileAppender> fileAppenders = new GridConcurrentHashSet<>();
 
@@ -102,9 +102,9 @@ public class GridTestLog4jLogger implements IgniteLogger, LoggerNodeIdAware {
     /** Quiet flag. */
     private final boolean quiet;
 
-    /** Node ID. */
+    /** Postfix. */
     @GridToStringExclude
-    private UUID nodeId;
+    private String postfix;
 
     /**
      * Creates new logger and automatically detects if root logger already
@@ -407,13 +407,18 @@ public class GridTestLog4jLogger implements IgniteLogger, LoggerNodeIdAware {
 
     /** {@inheritDoc} */
     @Override public void setNodeId(UUID nodeId) {
-        A.notNull(nodeId, "nodeId");
+        setPostfix(U.id8(nodeId));
+    }
+
+    /** {@inheritDoc} */
+    @Override public void setPostfix(String postfix) {
+        A.notNull(postfix, "postfix");
 
-        this.nodeId = nodeId;
+        this.postfix = postfix;
 
         for (FileAppender a : fileAppenders) {
-            if (a instanceof LoggerNodeIdAware) {
-                ((LoggerNodeIdAware)a).setNodeId(nodeId);
+            if (a instanceof LoggerPostfixAware) {
+                ((LoggerPostfixAware)a).setPostfix(postfix);
 
                 a.activateOptions();
             }
@@ -422,7 +427,7 @@ public class GridTestLog4jLogger implements IgniteLogger, LoggerNodeIdAware {
 
     /** {@inheritDoc} */
     @Override public UUID getNodeId() {
-        return nodeId;
+        throw new UnsupportedOperationException("getNodeId");
     }
 
     /**
diff --git a/modules/log4j/src/main/java/org/apache/ignite/logger/log4j/Log4JLogger.java b/modules/log4j/src/main/java/org/apache/ignite/logger/log4j/Log4JLogger.java
index ec0a5b3..fbcfc08 100644
--- a/modules/log4j/src/main/java/org/apache/ignite/logger/log4j/Log4JLogger.java
+++ b/modules/log4j/src/main/java/org/apache/ignite/logger/log4j/Log4JLogger.java
@@ -33,7 +33,7 @@ import org.apache.ignite.internal.util.typedef.internal.A;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteClosure;
-import org.apache.ignite.logger.LoggerNodeIdAware;
+import org.apache.ignite.logger.LoggerPostfixAware;
 import org.apache.log4j.Appender;
 import org.apache.log4j.Category;
 import org.apache.log4j.ConsoleAppender;
@@ -79,7 +79,7 @@ import static org.apache.ignite.IgniteSystemProperties.IGNITE_QUIET;
  * logger in your task/job code. See {@link org.apache.ignite.resources.LoggerResource} annotation about logger
  * injection.
  */
-public class Log4JLogger implements IgniteLogger, LoggerNodeIdAware, Log4jFileAware {
+public class Log4JLogger implements IgniteLogger, LoggerPostfixAware, Log4jFileAware {
     /** Appenders. */
     private static Collection<FileAppender> fileAppenders = new GridConcurrentHashSet<>();
 
@@ -503,9 +503,14 @@ public class Log4JLogger implements IgniteLogger, LoggerNodeIdAware, Log4jFileAw
     @Override public void setNodeId(UUID nodeId) {
         A.notNull(nodeId, "nodeId");
 
+        postfix(nodeId, U.id8(nodeId));
+    }
+
+    /** */
+    private void postfix(UUID nodeId, String postfix) {
         this.nodeId = nodeId;
 
-        updateFilePath(new Log4jNodeIdFilePath(nodeId));
+        updateFilePath(new Log4jNodeIdFilePath(postfix));
     }
 
     /** {@inheritDoc} */
@@ -513,6 +518,13 @@ public class Log4JLogger implements IgniteLogger, LoggerNodeIdAware, Log4jFileAw
         return nodeId;
     }
 
+    /** {@inheritDoc} */
+    @Override public void setPostfix(String postfix) {
+        A.notNull(postfix, "postfix");
+
+        postfix(nodeId, postfix);
+    }
+
     /**
      * Gets files for all registered file appenders.
      *
diff --git a/modules/log4j/src/main/java/org/apache/ignite/logger/log4j/Log4jNodeIdFilePath.java b/modules/log4j/src/main/java/org/apache/ignite/logger/log4j/Log4jNodeIdFilePath.java
index d4d1892..813f1e8 100644
--- a/modules/log4j/src/main/java/org/apache/ignite/logger/log4j/Log4jNodeIdFilePath.java
+++ b/modules/log4j/src/main/java/org/apache/ignite/logger/log4j/Log4jNodeIdFilePath.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.logger.log4j;
 
 import java.io.File;
-import java.util.UUID;
 import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -32,29 +31,29 @@ class Log4jNodeIdFilePath implements IgniteClosure<String, String> {
     private static final long serialVersionUID = 0L;
 
     /** Node id. */
-    private final UUID nodeId;
+    private final String postfix;
 
     /**
      * Creates new instance.
      *
-     * @param id Node id.
+     * @param postfix Postfix.
      */
-    Log4jNodeIdFilePath(UUID id) {
-        nodeId = id;
+    Log4jNodeIdFilePath(String postfix) {
+        this.postfix = postfix;
     }
 
     /** {@inheritDoc} */
     @Override public String apply(String oldPath) {
         if (!F.isEmpty(U.IGNITE_LOG_DIR))
-            return U.nodeIdLogFileName(nodeId, new File(U.IGNITE_LOG_DIR, "ignite.log").getAbsolutePath());
+            return U.logFileName(postfix, new File(U.IGNITE_LOG_DIR, "ignite.log").getAbsolutePath());
 
         if (oldPath != null) // fileName could be null if IGNITE_HOME is not defined.
-            return U.nodeIdLogFileName(nodeId, oldPath);
+            return U.logFileName(postfix, oldPath);
 
         String tmpDir = IgniteSystemProperties.getString("java.io.tmpdir");
 
         if (tmpDir != null)
-            return U.nodeIdLogFileName(nodeId, new File(tmpDir, "ignite.log").getAbsolutePath());
+            return U.logFileName(postfix, new File(tmpDir, "ignite.log").getAbsolutePath());
 
         System.err.println("Failed to get tmp directory for log file.");
 
diff --git a/modules/log4j2/src/main/java/org/apache/ignite/logger/log4j2/Log4J2Logger.java b/modules/log4j2/src/main/java/org/apache/ignite/logger/log4j2/Log4J2Logger.java
index 0f5c313..665be45 100644
--- a/modules/log4j2/src/main/java/org/apache/ignite/logger/log4j2/Log4J2Logger.java
+++ b/modules/log4j2/src/main/java/org/apache/ignite/logger/log4j2/Log4J2Logger.java
@@ -31,7 +31,7 @@ import org.apache.ignite.internal.util.typedef.internal.A;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteClosure;
-import org.apache.ignite.logger.LoggerNodeIdAware;
+import org.apache.ignite.logger.LoggerPostfixAware;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Marker;
@@ -81,7 +81,7 @@ import static org.apache.ignite.IgniteSystemProperties.IGNITE_QUIET;
  * logger in your task/job code. See {@link org.apache.ignite.resources.LoggerResource} annotation about logger
  * injection.
  */
-public class Log4J2Logger implements IgniteLogger, LoggerNodeIdAware {
+public class Log4J2Logger implements IgniteLogger, LoggerPostfixAware {
     /** */
     private static final String NODE_ID = "nodeId";
 
@@ -387,10 +387,14 @@ public class Log4J2Logger implements IgniteLogger, LoggerNodeIdAware {
     @Override public void setNodeId(UUID nodeId) {
         A.notNull(nodeId, "nodeId");
 
+        postfix(nodeId, U.id8(nodeId));
+    }
+
+    private void postfix(UUID nodeId, String postfix) {
         this.nodeId = nodeId;
 
-        // Set nodeId as system variable to be used at configuration.
-        System.setProperty(NODE_ID, U.id8(nodeId));
+        // Set postfix as system variable to be used at configuration.
+        System.setProperty(NODE_ID, postfix);
 
         if (inited) {
             final LoggerContext ctx = impl.getContext();
@@ -415,6 +419,13 @@ public class Log4J2Logger implements IgniteLogger, LoggerNodeIdAware {
         return nodeId;
     }
 
+    /** {@inheritDoc} */
+    @Override public void setPostfix(String postfix) {
+        A.notNull(postfix, "nodeId");
+
+        postfix(null, postfix);
+    }
+
     /**
      * Gets {@link IgniteLogger} wrapper around log4j logger for the given
      * category. If category is {@code null}, then root logger is returned. If
diff --git a/modules/log4j2/src/test/java/org/apache/ignite/logger/log4j2/Log4j2LoggerSelfTest.java b/modules/log4j2/src/test/java/org/apache/ignite/logger/log4j2/Log4j2LoggerSelfTest.java
index 3ebd15d..fcc40b8 100644
--- a/modules/log4j2/src/test/java/org/apache/ignite/logger/log4j2/Log4j2LoggerSelfTest.java
+++ b/modules/log4j2/src/test/java/org/apache/ignite/logger/log4j2/Log4j2LoggerSelfTest.java
@@ -26,7 +26,7 @@ import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.util.typedef.G;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.logger.LoggerNodeIdAware;
+import org.apache.ignite.logger.LoggerPostfixAware;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
 import org.apache.ignite.testframework.GridTestUtils;
@@ -70,7 +70,9 @@ public class Log4j2LoggerSelfTest {
         assertTrue(log.toString().contains("Log4J2Logger"));
         assertTrue(log.toString().contains(xml.getPath()));
 
-        ((LoggerNodeIdAware)log).setNodeId(UUID.randomUUID());
+        UUID id = UUID.randomUUID();
+        ((LoggerPostfixAware)log).setNodeId(id);
+        assertEquals(id, ((LoggerPostfixAware)log).getNodeId());
 
         checkLog(log);
     }
@@ -93,7 +95,9 @@ public class Log4j2LoggerSelfTest {
         assertTrue(log.toString().contains("Log4J2Logger"));
         assertTrue(log.toString().contains(url.getPath()));
 
-        ((LoggerNodeIdAware)log).setNodeId(UUID.randomUUID());
+        UUID id = UUID.randomUUID();
+        ((LoggerPostfixAware)log).setNodeId(id);
+        assertEquals(id, ((LoggerPostfixAware)log).getNodeId());
 
         checkLog(log);
     }
@@ -110,7 +114,9 @@ public class Log4j2LoggerSelfTest {
         assertTrue(log.toString().contains("Log4J2Logger"));
         assertTrue(log.toString().contains(LOG_PATH_TEST));
 
-        ((LoggerNodeIdAware)log).setNodeId(UUID.randomUUID());
+        UUID id = UUID.randomUUID();
+        ((LoggerPostfixAware)log).setNodeId(id);
+        assertEquals(id, ((LoggerPostfixAware)log).getNodeId());
 
         checkLog(log);
     }
@@ -140,6 +146,10 @@ public class Log4j2LoggerSelfTest {
         new Log4J2Logger(LOG_PATH_TEST).setNodeId(id);
 
         assertEquals(U.id8(id), System.getProperty("nodeId"));
+
+        new Log4J2Logger(LOG_PATH_TEST).setPostfix("myapp");
+
+        assertEquals("myapp", System.getProperty("nodeId"));
     }
 
     /**