You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2016/08/25 20:29:45 UTC
[2/3] logging-log4j2 git commit: Support FileAppender
Support FileAppender
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/3aceb2a3
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/3aceb2a3
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/3aceb2a3
Branch: refs/heads/master
Commit: 3aceb2a327bdade228ec15662bce4cf541f82239
Parents: fadd676
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Thu Aug 25 22:29:08 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Thu Aug 25 22:29:08 2016 +0200
----------------------------------------------------------------------
.../log4j/config/Log4j1ConfigurationParser.java | 48 ++++++++++++++++++--
.../config/Log4j1ConfigurationFactoryTest.java | 25 +++++++++-
...g4j-console-EnhancedPatternLayout.properties | 1 -
.../log4j-console-HtmlLayout.properties | 1 -
.../log4j-console-PatternLayout.properties | 1 -
.../log4j-console-SimpleLayout.properties | 1 -
.../log4j-console-TTCCLayout.properties | 1 -
.../log4j-console-XmlLayout.properties | 1 -
.../log4j-file-SimpleLayout.properties | 17 +++++++
9 files changed, 83 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3aceb2a3/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java
index 11f7f76..84b8533 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java
@@ -19,6 +19,7 @@ package org.apache.log4j.config;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder;
+import org.apache.logging.log4j.core.config.builder.api.ComponentBuilder;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory;
import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder;
@@ -126,6 +127,9 @@ public class Log4j1ConfigurationParser {
case "org.apache.log4j.ConsoleAppender":
buildConsoleAppender(appenderName);
break;
+ case "org.apache.log4j.FileAppender":
+ buildFileAppender(appenderName);
+ break;
default:
reportWarning("Unknown appender class: " + appenderClass + "; ignoring appender: " + appenderName);
}
@@ -151,16 +155,46 @@ public class Log4j1ConfigurationParser {
appenderBuilder.addAttribute("target", target);
}
}
- buildAppenderAttribute(appenderName, appenderBuilder, "Follow", "false", "follow");
+ buildAttribute(appenderName, appenderBuilder, "Follow", "follow");
+ if ("false".equalsIgnoreCase(getLog4jAppenderValue(appenderName, "ImmediateFlush"))) {
+ reportWarning("ImmediateFlush=false is not supported on Console appender");
+ }
buildAppenderLayout(appenderName, appenderBuilder);
builder.add(appenderBuilder);
}
- private void buildAppenderAttribute(String appenderName, AppenderComponentBuilder appenderBuilder,
- String sourceAttributeName, String defaultValue, String targetAttributeName) {
- final String attributeValue = getLog4jAppenderValue(appenderName, sourceAttributeName, defaultValue);
+ private void buildFileAppender(final String appenderName) {
+ final AppenderComponentBuilder appenderBuilder = builder.newAppender(appenderName, "File");
+ buildMandatoryAttribute(appenderName, appenderBuilder, "File", "fileName");
+ buildAttribute(appenderName, appenderBuilder, "Append", "append");
+ buildAttribute(appenderName, appenderBuilder, "BufferedIO", "bufferedIo");
+ buildAttribute(appenderName, appenderBuilder, "BufferSize", "bufferSize");
+ buildAttribute(appenderName, appenderBuilder, "ImmediateFlush", "immediateFlush");
+ buildAppenderLayout(appenderName, appenderBuilder);
+ builder.add(appenderBuilder);
+ }
+
+ private void buildAttribute(String componentName, ComponentBuilder componentBuilder,
+ String sourceAttributeName, String targetAttributeName) {
+ final String attributeValue = getLog4jAppenderValue(componentName, sourceAttributeName);
+ if (attributeValue != null) {
+ componentBuilder.addAttribute(targetAttributeName, attributeValue);
+ }
+ }
+
+ private void buildAttributeWithDefault(String componentName, ComponentBuilder componentBuilder,
+ String sourceAttributeName, String targetAttributeName, String defaultValue) {
+ final String attributeValue = getLog4jAppenderValue(componentName, sourceAttributeName, defaultValue);
+ componentBuilder.addAttribute(targetAttributeName, attributeValue);
+ }
+
+ private void buildMandatoryAttribute(String componentName, ComponentBuilder componentBuilder,
+ String sourceAttributeName, String targetAttributeName) {
+ final String attributeValue = getLog4jAppenderValue(componentName, sourceAttributeName);
if (attributeValue != null) {
- appenderBuilder.addAttribute(targetAttributeName, attributeValue);
+ componentBuilder.addAttribute(targetAttributeName, attributeValue);
+ } else {
+ reportWarning("Missing " + sourceAttributeName + " for " + componentName);
}
}
@@ -273,6 +307,10 @@ public class Log4j1ConfigurationParser {
}
+ private String getLog4jAppenderValue(final String appenderName, final String attributeName) {
+ return properties.getProperty("log4j.appender." + appenderName + "." + attributeName);
+ }
+
private String getLog4jAppenderValue(final String appenderName, final String attributeName,
final String defaultValue) {
return properties.getProperty("log4j.appender." + appenderName + "." + attributeName, defaultValue);
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3aceb2a3/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 9f34563..43d7b14 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
@@ -23,6 +23,7 @@ import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.appender.ConsoleAppender.Target;
+import org.apache.logging.log4j.core.appender.FileAppender;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;
import org.apache.logging.log4j.core.layout.HtmlLayout;
@@ -41,8 +42,6 @@ public class Log4j1ConfigurationFactoryTest {
assertNotNull(configuration);
final ConsoleAppender appender = configuration.getAppender("Console");
assertNotNull(appender);
- // Can't set ImmediateFlush for a Console Appender in Log4j 2 like you can in 1.2
- assertTrue(appender.getImmediateFlush());
assertEquals(Target.SYSTEM_ERR, appender.getTarget());
//
final LoggerConfig loggerConfig = configuration.getLoggerConfig("com.example.foo");
@@ -51,6 +50,22 @@ public class Log4j1ConfigurationFactoryTest {
return appender.getLayout();
}
+ private Layout<?> testFile(final String configResource) throws Exception {
+ final URL configLocation = ClassLoader.getSystemResource(configResource);
+ assertNotNull(configLocation);
+ final Configuration configuration = new Log4j1ConfigurationFactory().getConfiguration("test",
+ configLocation.toURI());
+ assertNotNull(configuration);
+ final FileAppender appender = configuration.getAppender("File");
+ assertNotNull(appender);
+ assertEquals("target/mylog.txt", appender.getFileName());
+ //
+ final LoggerConfig loggerConfig = configuration.getLoggerConfig("com.example.foo");
+ 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");
@@ -88,4 +103,10 @@ public class Log4j1ConfigurationFactoryTest {
assertTrue(layout.isLocationInfo());
assertFalse(layout.isProperties());
}
+
+ @Test
+ public void testFileSimpleLayout() throws Exception {
+ final PatternLayout layout = (PatternLayout) testFile("config-1.2/log4j-file-SimpleLayout.properties");
+ assertEquals("%level - %m%n", layout.getConversionPattern());
+ }
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3aceb2a3/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-EnhancedPatternLayout.properties
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-EnhancedPatternLayout.properties b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-EnhancedPatternLayout.properties
index 01a4463..6793eb2 100644
--- a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-EnhancedPatternLayout.properties
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-EnhancedPatternLayout.properties
@@ -11,7 +11,6 @@ log4j.rootLogger=TRACE, Console
#
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.EnhancedPatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{ISO8601} [%t][%c] %-5p %X %x: %m%n
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3aceb2a3/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-HtmlLayout.properties
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-HtmlLayout.properties b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-HtmlLayout.properties
index 304180c..216a12e 100644
--- a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-HtmlLayout.properties
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-HtmlLayout.properties
@@ -11,7 +11,6 @@ log4j.rootLogger=TRACE, Console
#
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.HTMLLayout
log4j.appender.Console.layout.Title=Headline
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3aceb2a3/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-PatternLayout.properties
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-PatternLayout.properties b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-PatternLayout.properties
index fab7070..810a494 100644
--- a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-PatternLayout.properties
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-PatternLayout.properties
@@ -11,7 +11,6 @@ log4j.rootLogger=TRACE, Console
#
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.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{ISO8601} [%t][%c] %-5p: %m%n
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3aceb2a3/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-SimpleLayout.properties
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-SimpleLayout.properties b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-SimpleLayout.properties
index 5e915f8..5a8ac4e 100644
--- a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-SimpleLayout.properties
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-SimpleLayout.properties
@@ -11,7 +11,6 @@ log4j.rootLogger=TRACE, Console
#
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.SimpleLayout
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3aceb2a3/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 9f91789..80d38c2 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
@@ -11,7 +11,6 @@ log4j.rootLogger=TRACE, Console
#
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
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3aceb2a3/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-XmlLayout.properties
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-XmlLayout.properties b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-XmlLayout.properties
index 96302a2..c8190ec 100644
--- a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-XmlLayout.properties
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-XmlLayout.properties
@@ -11,7 +11,6 @@ log4j.rootLogger=TRACE, Console
#
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.xml.XMLLayout
log4j.appender.Console.layout.LocationInfo=true
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3aceb2a3/log4j-1.2-api/src/test/resources/config-1.2/log4j-file-SimpleLayout.properties
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/src/test/resources/config-1.2/log4j-file-SimpleLayout.properties b/log4j-1.2-api/src/test/resources/config-1.2/log4j-file-SimpleLayout.properties
new file mode 100644
index 0000000..4d3ec0d
--- /dev/null
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-file-SimpleLayout.properties
@@ -0,0 +1,17 @@
+###############################################################################
+#
+# Log4J 1.2 Configuration.
+#
+
+log4j.rootLogger=TRACE, File
+
+##############################################################################
+#
+# The Console log
+#
+
+log4j.appender.File=org.apache.log4j.FileAppender
+log4j.appender.File.File=target/mylog.txt
+log4j.appender.File.layout=org.apache.log4j.SimpleLayout
+
+log4j.logger.com.example.foo = DEBUG