LOG4J2-2022 - RFC5424Layout now prints the process id
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/39114a7a Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/39114a7a Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/39114a7a Branch: refs/heads/LOG4J2-1431 Commit: 39114a7af34a01312bcbefadf3e905dcb6fde75b Parents: e3a1298 Author: Ralph Goers <[email protected]> Authored: Sun Aug 20 16:08:43 2017 -0700 Committer: Ralph Goers <[email protected]> Committed: Sun Aug 20 16:08:55 2017 -0700 ---------------------------------------------------------------------- .../logging/log4j/util/ProcessIdUtil.java | 14 ++++++++++++ .../logging/log4j/util/ProcessIdUtilTest.java | 13 +++++++++++ .../logging/log4j/util/ProcessIdUtil.java | 17 +++++++++++++- .../logging/log4j/util/ProcessIdUtilTest.java | 14 ++++++++++++ .../core/pattern/ProcessIdPatternConverter.java | 12 +++------- .../log4j/core/layout/Rfc5424LayoutTest.java | 24 ++++++++++++-------- src/changes/changes.xml | 3 +++ 7 files changed, 77 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/39114a7a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/ProcessIdUtil.java ---------------------------------------------------------------------- diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/ProcessIdUtil.java b/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/ProcessIdUtil.java new file mode 100644 index 0000000..31ed6cf --- /dev/null +++ b/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/ProcessIdUtil.java @@ -0,0 +1,14 @@ +package org.apache.logging.log4j.util; + +public class ProcessIdUtil { + + public static final String DEFAULT_PROCESSID = "-"; + + public static String getProcessId() { + try { + return Long.toString(ProcessHandle.current().pid()); + } catch(Exception ex) { + return DEFAULT_PROCESSID; + } + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/39114a7a/log4j-api-java9/src/test/java/org/apache/logging/log4j/util/ProcessIdUtilTest.java ---------------------------------------------------------------------- diff --git a/log4j-api-java9/src/test/java/org/apache/logging/log4j/util/ProcessIdUtilTest.java b/log4j-api-java9/src/test/java/org/apache/logging/log4j/util/ProcessIdUtilTest.java new file mode 100644 index 0000000..8a381d9 --- /dev/null +++ b/log4j-api-java9/src/test/java/org/apache/logging/log4j/util/ProcessIdUtilTest.java @@ -0,0 +1,13 @@ +package org.apache.logging.log4j.util; + +import org.junit.Test; +import static org.junit.Assert.assertFalse; + +public class ProcessIdUtilTest { + + @Test + public void processIdTest() throws Exception { + String processId = ProcessIdUtil.getProcessId(); + assertFalse("ProcessId is default", processId.equals(ProcessIdUtil.DEFAULT_PROCESSID)); + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/39114a7a/log4j-api/src/main/java/org/apache/logging/log4j/util/ProcessIdUtil.java ---------------------------------------------------------------------- diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/ProcessIdUtil.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/ProcessIdUtil.java index 9852291..f9bf342 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/util/ProcessIdUtil.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/ProcessIdUtil.java @@ -1,8 +1,23 @@ package org.apache.logging.log4j.util; +import java.io.File; +import java.io.IOException; +import java.lang.management.ManagementFactory; + public class ProcessIdUtil { + public static final String DEFAULT_PROCESSID = "-"; + public static String getProcessId() { - return "-"; + try { + return ManagementFactory.getRuntimeMXBean().getName().split("@")[0]; // likely works on most platforms + } catch (final Exception ex) { + try { + return new File("/proc/self").getCanonicalFile().getName(); // try a Linux-specific way + } catch (final IOException ignoredUseDefault) { + // Ignore exception. + } + } + return DEFAULT_PROCESSID; } } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/39114a7a/log4j-api/src/test/java/org/apache/logging/log4j/util/ProcessIdUtilTest.java ---------------------------------------------------------------------- diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/util/ProcessIdUtilTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/util/ProcessIdUtilTest.java new file mode 100644 index 0000000..5ce161d --- /dev/null +++ b/log4j-api/src/test/java/org/apache/logging/log4j/util/ProcessIdUtilTest.java @@ -0,0 +1,14 @@ +package org.apache.logging.log4j.util; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class ProcessIdUtilTest { + + @Test + public void processIdTest() throws Exception { + String processId = ProcessIdUtil.getProcessId(); + assertFalse("ProcessId is default", processId.equals(ProcessIdUtil.DEFAULT_PROCESSID)); + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/39114a7a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ProcessIdPatternConverter.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ProcessIdPatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ProcessIdPatternConverter.java index dd9579b..7c37263 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ProcessIdPatternConverter.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ProcessIdPatternConverter.java @@ -22,6 +22,7 @@ import java.lang.management.ManagementFactory; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.plugins.Plugin; +import org.apache.logging.log4j.util.ProcessIdUtil; @Plugin(name = "ProcessIdPatternConverter", category = "Converter") @ConverterKeys({ "pid", "processId" }) @@ -35,15 +36,8 @@ public final class ProcessIdPatternConverter extends LogEventPatternConverter { private ProcessIdPatternConverter(final String... options) { super("Process ID", "pid"); final String defaultValue = options.length > 0 ? options[0] : DEFAULT_DEFAULT_VALUE; - String discoveredPid = null; - try { - discoveredPid = ManagementFactory.getRuntimeMXBean().getName().split("@")[0]; // likely works on most platforms - } catch (final Exception ex) { - try { - discoveredPid = new File("/proc/self").getCanonicalFile().getName(); // try a Linux-specific way - } catch (final IOException ignoredUseDefault) {} - } - pid = discoveredPid == null ? defaultValue : discoveredPid; + String discoveredPid = ProcessIdUtil.getProcessId(); + pid = discoveredPid.equals(ProcessIdUtil.DEFAULT_PROCESSID) ? defaultValue : discoveredPid; } /** http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/39114a7a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Rfc5424LayoutTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Rfc5424LayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Rfc5424LayoutTest.java index 5025ff3..db70075 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Rfc5424LayoutTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Rfc5424LayoutTest.java @@ -36,6 +36,7 @@ import org.apache.logging.log4j.message.StructuredDataCollectionMessage; import org.apache.logging.log4j.message.StructuredDataMessage; import org.apache.logging.log4j.status.StatusLogger; import org.apache.logging.log4j.test.appender.ListAppender; +import org.apache.logging.log4j.util.ProcessIdUtil; import org.apache.logging.log4j.util.Strings; import org.junit.AfterClass; import org.junit.Assert; @@ -49,23 +50,26 @@ public class Rfc5424LayoutTest { LoggerContext ctx = LoggerContext.getContext(); Logger root = ctx.getRootLogger(); - - private static final String line1 = "ATM - - [RequestContext@3692 loginId=\"JohnDoe\"] starting mdc pattern test"; - private static final String line2 = "ATM - - [RequestContext@3692 loginId=\"JohnDoe\"] empty mdc"; - private static final String line3 = "ATM - - [RequestContext@3692 loginId=\"JohnDoe\"] filled mdc"; + private static final String PROCESSID = ProcessIdUtil.getProcessId(); + private static final String line1 = String.format("ATM %s - [RequestContext@3692 loginId=\"JohnDoe\"] starting mdc pattern test", PROCESSID); + private static final String line2 = String.format("ATM %s - [RequestContext@3692 loginId=\"JohnDoe\"] empty mdc", PROCESSID); + private static final String line3 = String.format("ATM %s - [RequestContext@3692 loginId=\"JohnDoe\"] filled mdc", PROCESSID); private static final String line4 = - "ATM - Audit [Transfer@18060 Amount=\"200.00\" FromAccount=\"123457\" ToAccount=\"123456\"]" + - "[RequestContext@3692 ipAddress=\"192.168.0.120\" loginId=\"JohnDoe\"] Transfer Complete"; - private static final String lineEscaped3 = "ATM - - [RequestContext@3692 escaped=\"Testing escaping #012 \\\" \\] \\\"\" loginId=\"JohnDoe\"] filled mdc"; + String.format("ATM %s Audit [Transfer@18060 Amount=\"200.00\" FromAccount=\"123457\" ToAccount=\"123456\"]" + + "[RequestContext@3692 ipAddress=\"192.168.0.120\" loginId=\"JohnDoe\"] Transfer Complete", PROCESSID); + private static final String lineEscaped3 = + String.format("ATM %s - [RequestContext@3692 escaped=\"Testing escaping #012 \\\" \\] \\\"\" loginId=\"JohnDoe\"] filled mdc", PROCESSID); private static final String lineEscaped4 = - "ATM - Audit [Transfer@18060 Amount=\"200.00\" FromAccount=\"123457\" ToAccount=\"123456\"]" + - "[RequestContext@3692 escaped=\"Testing escaping #012 \\\" \\] \\\"\" ipAddress=\"192.168.0.120\" loginId=\"JohnDoe\"] Transfer Complete"; + String.format("ATM %s Audit [Transfer@18060 Amount=\"200.00\" FromAccount=\"123457\" ToAccount=\"123456\"]" + + "[RequestContext@3692 escaped=\"Testing escaping #012 \\\" \\] \\\"\" ipAddress=\"192.168.0.120\" loginId=\"JohnDoe\"] Transfer Complete", + PROCESSID); private static final String collectionLine1 = "[Transfer@18060 Amount=\"200.00\" FromAccount=\"123457\" " + "ToAccount=\"123456\"]"; private static final String collectionLine2 = "[Extra@18060 Item1=\"Hello\" Item2=\"World\"]"; private static final String collectionLine3 = "[RequestContext@3692 ipAddress=\"192.168.0.120\" loginId=\"JohnDoe\"]"; private static final String collectionEndOfLine = "Transfer Complete"; + static ConfigurationFactory cf = new BasicConfigurationFactory(); @Rule @@ -467,7 +471,7 @@ public class Rfc5424LayoutTest { public void testSubstituteStructuredData() { final String mdcId = "RequestContext"; - final String expectedToContain = "ATM - MSG-ID - Message"; + final String expectedToContain = String.format("ATM %s MSG-ID - Message", PROCESSID); for (final Appender appender : root.getAppenders().values()) { root.removeAppender(appender); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/39114a7a/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 70e88d1..12033e4 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -31,6 +31,9 @@ - "remove" - Removed --> <release version="2.9.0" date="2017-MM-DD" description="GA Release 2.9.0"> + <action issue="LOG4J2-2022" dev="rgoers" type="update"> + RFC5424Layout now prints the process id. + </action> <action issue="LOG4J2-2020" dev="mikes" type="update"> Remove default layout from KafkaAppender. </action>
