You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/08/19 07:15:52 UTC

[27/50] logging-log4j2 git commit: Support Log4j 1 TTCCLayout options

Support Log4j 1 TTCCLayout options


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/ff36b4aa
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/ff36b4aa
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/ff36b4aa

Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: ff36b4aa3c15266f8fd1e703df054f88ba1ddc8a
Parents: a45fe18
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Wed Aug 17 10:37:11 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Wed Aug 17 10:37:11 2016 +0200

----------------------------------------------------------------------
 .../config/Log4j1ConfigurationFactory.java      | 16 ++++--
 .../org/apache/log4j/layout/TTCCLayout.java     | 58 +++++++++++++++-----
 .../config/Log4j1ConfigurationFactoryTest.java  | 33 ++++++-----
 .../org/apache/log4j/layout/TTCCLayoutTest.java |  2 +-
 .../log4j-console-TTCCLayout.properties         |  2 +
 5 files changed, 78 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ff36b4aa/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java
index d0126bf..d88a23c 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java
@@ -107,19 +107,20 @@ public class Log4j1ConfigurationFactory extends ConfigurationFactory {
             final ConfigurationBuilder<BuiltConfiguration> builder, final AppenderComponentBuilder appenderBuilder) {
         final String layoutValue = getLog4jAppenderValue(properties, name, "layout", null);
         if (layoutValue != null) {
-            final String cpValue = getLog4jAppenderValue(properties, name, "layout.ConversionPattern", null);
             switch (layoutValue) {
             case "org.apache.log4j.PatternLayout": {
+                final String pattern = getLog4jAppenderValue(properties, name, "layout.ConversionPattern", null);
                 // TODO Log4j 2's PatternLayout's %x (NDC) is not compatible with Log4j 1's %x
                 //      Log4j 1: "foo bar baz"
                 //      Log4j 2: "[foo, bar, baz]"
                 // TODO Log4j 2's PatternLayout's %X (MDC) is not compatible with Log4j 1's %X
                 //      Log4j 1: "{{foo,bar},{hoo,boo}}"
                 //      Log4j 2: "{foo=bar,hoo=boo}"
-                appenderBuilder.add(newPatternLayout(builder, cpValue));
+                appenderBuilder.add(newPatternLayout(builder, pattern));
                 break;
             }
             case "org.apache.log4j.EnhancedPatternLayout": {
+                final String pattern = getLog4jAppenderValue(properties, name, "layout.ConversionPattern", null);
                 // TODO missing %ndc as alias for %NDC
                 // TODO missing %properties as alias for %MDC
                 // TODO Log4j 2's PatternLayout's %x (NDC) is not compatible with Log4j 1's %x
@@ -128,7 +129,7 @@ public class Log4j1ConfigurationFactory extends ConfigurationFactory {
                 // TODO Log4j 2's PatternLayout's %X (MDC) is not compatible with Log4j 1's %X
                 //      Log4j 1: "{{foo,bar},{hoo,boo}}"
                 //      Log4j 2: "{foo=bar,hoo=boo}"
-                appenderBuilder.add(newPatternLayout(builder, cpValue));
+                appenderBuilder.add(newPatternLayout(builder, pattern));
                 break;
             }
             case "org.apache.log4j.SimpleLayout": {
@@ -136,7 +137,14 @@ public class Log4j1ConfigurationFactory extends ConfigurationFactory {
                 break;
             }
             case "org.apache.log4j.TTCCLayout": {
-                appenderBuilder.add(builder.newLayout("TTCCLayout"));
+                final LayoutComponentBuilder ttccLayout = builder.newLayout("TTCCLayout");
+                ttccLayout.addAttribute("threadPrinting",
+                        Boolean.parseBoolean(getLog4jAppenderValue(properties, name, "layout.ThreadPrinting", "true")));
+                ttccLayout.addAttribute("categoryPrefixing",
+                        Boolean.parseBoolean(getLog4jAppenderValue(properties, name, "layout.CategoryPrefixing", "true")));
+                ttccLayout.addAttribute("contextPrinting",
+                        Boolean.parseBoolean(getLog4jAppenderValue(properties, name, "layout.ContextPrinting", "true")));
+                appenderBuilder.add(ttccLayout);
                 break;
             }
             case "org.apache.log4j.HTMLLayout": {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ff36b4aa/log4j-1.2-api/src/main/java/org/apache/log4j/layout/TTCCLayout.java
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/layout/TTCCLayout.java b/log4j-1.2-api/src/main/java/org/apache/log4j/layout/TTCCLayout.java
index 53bd6db..783d779 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/layout/TTCCLayout.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/layout/TTCCLayout.java
@@ -20,6 +20,7 @@ import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.Node;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
 import org.apache.logging.log4j.core.layout.AbstractStringLayout;
 import org.apache.logging.log4j.core.layout.ByteBufferDestination;
@@ -38,15 +39,40 @@ import java.util.List;
 @Plugin(name = "TTCCLayout", category = Node.CATEGORY, elementType = Layout.ELEMENT_TYPE, printObject = true)
 public final class TTCCLayout extends AbstractStringLayout {
 
+    private final boolean threadPrinting;
+    private final boolean categoryPrefixing;
+    private final boolean contextPrinting;
+
     final long startTime = System.currentTimeMillis();
 
     @PluginFactory
-    public static TTCCLayout createLayout() {
-        return new TTCCLayout();
+    public static TTCCLayout createLayout(
+            // @formatter:off
+            @PluginAttribute(value = "threadPrinting", defaultBoolean = true) final boolean threadPrinting,
+            @PluginAttribute(value = "categoryPrefixing", defaultBoolean = true) final boolean categoryPrefixing,
+            @PluginAttribute(value = "contextPrinting", defaultBoolean = true) final boolean contextPrinting
+            // @formatter:on
+    ) {
+        return new TTCCLayout(threadPrinting, categoryPrefixing, contextPrinting);
     }
 
-    private TTCCLayout() {
+    private TTCCLayout(boolean threadPrinting, boolean categoryPrefixing, boolean contextPrinting) {
         super(StandardCharsets.UTF_8);
+        this.threadPrinting = threadPrinting;
+        this.categoryPrefixing = categoryPrefixing;
+        this.contextPrinting = contextPrinting;
+    }
+
+    public boolean isThreadPrinting() {
+        return threadPrinting;
+    }
+
+    public boolean isCategoryPrefixing() {
+        return categoryPrefixing;
+    }
+
+    public boolean isContextPrinting() {
+        return contextPrinting;
     }
 
     @Override
@@ -67,21 +93,27 @@ public final class TTCCLayout extends AbstractStringLayout {
         buf.append(event.getTimeMillis() - startTime);
         buf.append(' ');
 
-        buf.append('[');
-        buf.append(event.getThreadName());
-        buf.append("] ");
+        if (threadPrinting) {
+            buf.append('[');
+            buf.append(event.getThreadName());
+            buf.append("] ");
+        }
 
         buf.append(event.getLevel().toString());
         buf.append(' ');
 
-        buf.append(event.getLoggerName());
-        buf.append(' ');
+        if (categoryPrefixing) {
+            buf.append(event.getLoggerName());
+            buf.append(' ');
+        }
 
-        List<String> ndc = event.getContextStack().asList();
-        if (!ndc.isEmpty()) {
-            for (String ndcElement : ndc) {
-                buf.append(ndcElement);
-                buf.append(' ');
+        if(this.contextPrinting) {
+            List<String> ndc = event.getContextStack().asList();
+            if (!ndc.isEmpty()) {
+                for (String ndcElement : ndc) {
+                    buf.append(ndcElement);
+                    buf.append(' ');
+                }
             }
         }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ff36b4aa/log4j-1.2-api/src/test/java/org/apache/log4j/config/Log4j1ConfigurationFactoryTest.java
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/Log4j1ConfigurationFactoryTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/Log4j1ConfigurationFactoryTest.java
index 35445c4..81eb214 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/Log4j1ConfigurationFactoryTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/Log4j1ConfigurationFactoryTest.java
@@ -26,64 +26,67 @@ import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.LoggerConfig;
 import org.apache.logging.log4j.core.layout.HtmlLayout;
 import org.apache.logging.log4j.core.layout.PatternLayout;
-import org.junit.Assert;
 import org.junit.Test;
 
 import java.net.URL;
 
+import static org.junit.Assert.*;
+
 public class Log4j1ConfigurationFactoryTest {
 
     private Layout<?> testConsole(final String configResource) throws Exception {
         final URL configLocation = ClassLoader.getSystemResource(configResource);
-        Assert.assertNotNull(configLocation);
+        assertNotNull(configLocation);
         final Configuration configuration = new Log4j1ConfigurationFactory().getConfiguration("test",
                 configLocation.toURI());
-        Assert.assertNotNull(configuration);
+        assertNotNull(configuration);
         final ConsoleAppender appender = configuration.getAppender("Console");
-        Assert.assertNotNull(appender);
+        assertNotNull(appender);
         // Can't set ImmediateFlush for a Console Appender in Log4j 2 like you can in 1.2
-        Assert.assertTrue(appender.getImmediateFlush());
-        Assert.assertEquals(Target.SYSTEM_ERR, appender.getTarget());
+        assertTrue(appender.getImmediateFlush());
+        assertEquals(Target.SYSTEM_ERR, appender.getTarget());
         //
         final LoggerConfig loggerConfig = configuration.getLoggerConfig("com.example.foo");
-        Assert.assertNotNull(loggerConfig);
-        Assert.assertEquals(Level.DEBUG, loggerConfig.getLevel());
+        assertNotNull(loggerConfig);
+        assertEquals(Level.DEBUG, loggerConfig.getLevel());
         return appender.getLayout();
     }
 
     @Test
     public void testConsoleEnhancedPatternLayout() throws Exception {
         final PatternLayout layout = (PatternLayout) testConsole("config-1.2/log4j-console-EnhancedPatternLayout.properties");
-        Assert.assertEquals("%d{ISO8601} [%t][%c] %-5p: %m%n", layout.getConversionPattern());
+        assertEquals("%d{ISO8601} [%t][%c] %-5p: %m%n", layout.getConversionPattern());
     }
 
     @Test
     public void testConsoleHtmlLayout() throws Exception {
         final Layout<?> layout = testConsole("config-1.2/log4j-console-HtmlLayout.properties");
-        Assert.assertTrue(layout instanceof HtmlLayout);
+        assertTrue(layout instanceof HtmlLayout);
     }
 
     @Test
     public void testConsolePatternLayout() throws Exception {
         final PatternLayout layout = (PatternLayout) testConsole("config-1.2/log4j-console-PatternLayout.properties");
-        Assert.assertEquals("%d{ISO8601} [%t][%c] %-5p: %m%n", layout.getConversionPattern());
+        assertEquals("%d{ISO8601} [%t][%c] %-5p: %m%n", layout.getConversionPattern());
     }
 
     @Test
     public void testConsoleSimpleLayout() throws Exception {
         final PatternLayout layout = (PatternLayout) testConsole("config-1.2/log4j-console-SimpleLayout.properties");
-        Assert.assertEquals("%level - %m%n", layout.getConversionPattern());
+        assertEquals("%level - %m%n", layout.getConversionPattern());
     }
 
     @Test
     public void testConsoleTtccLayout() throws Exception {
-        final Layout<?> layout = testConsole("config-1.2/log4j-console-TTCCLayout.properties");
-        Assert.assertTrue(layout instanceof TTCCLayout);
+        final TTCCLayout layout = (TTCCLayout)testConsole("config-1.2/log4j-console-TTCCLayout.properties");
+        assertTrue(layout.isThreadPrinting());
+        assertFalse(layout.isCategoryPrefixing());
+        assertTrue(layout.isContextPrinting());
     }
 
     @Test
     public void testConsoleXmlLayout() throws Exception {
         final Layout<?> layout = testConsole("config-1.2/log4j-console-XmlLayout.properties");
-        Assert.assertTrue(layout instanceof Log4j1XmlLayout);
+        assertTrue(layout instanceof Log4j1XmlLayout);
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ff36b4aa/log4j-1.2-api/src/test/java/org/apache/log4j/layout/TTCCLayoutTest.java
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/layout/TTCCLayoutTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/layout/TTCCLayoutTest.java
index 1f548a8..cc6af0b 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/layout/TTCCLayoutTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/layout/TTCCLayoutTest.java
@@ -51,7 +51,7 @@ public class TTCCLayoutTest {
     }
 
     private void test(ThreadContext.ContextStack contextStack, String stackOutput) {
-        TTCCLayout layout = TTCCLayout.createLayout();
+        TTCCLayout layout = TTCCLayout.createLayout(true, true, true);
 
         Log4jLogEvent event = Log4jLogEvent.newBuilder()
                 .setLoggerName("a.B")

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ff36b4aa/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-TTCCLayout.properties
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-TTCCLayout.properties b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-TTCCLayout.properties
index d6bd829..9f91789 100644
--- a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-TTCCLayout.properties
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-TTCCLayout.properties
@@ -14,5 +14,7 @@ log4j.appender.Console=org.apache.log4j.ConsoleAppender
 log4j.appender.Console.ImmediateFlush=false
 log4j.appender.Console.Target=System.err
 log4j.appender.Console.layout=org.apache.log4j.TTCCLayout
+log4j.appender.Console.layout.ThreadPrinting=true
+log4j.appender.Console.layout.CategoryPrefixing=false
 
 log4j.logger.com.example.foo = DEBUG