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