Repository: logging-log4j2
Updated Branches:
  refs/heads/master f6f529a45 -> ea6ad94e6


[LOG4J2-1523] Log4j 1 appenders. Classic DailyRollingFileAppender.

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

Branch: refs/heads/master
Commit: ea6ad94e6e1e05ce73fc56417ec7d3bd76f57244
Parents: f6f529a
Author: Gary Gregory <ggreg...@apache.org>
Authored: Thu Sep 22 00:41:09 2016 -0700
Committer: Gary Gregory <ggreg...@apache.org>
Committed: Thu Sep 22 00:41:09 2016 -0700

----------------------------------------------------------------------
 .../log4j/config/Log4j1ConfigurationParser.java | 55 ++++++++++++++------
 .../config/Log4j1ConfigurationFactoryTest.java  | 52 +++++++++++++++---
 .../log4j-DailyRollingFileAppender.properties   | 26 +++++++++
 .../log4j/core/appender/ConsoleAppender.java    |  3 +-
 .../log4j/core/appender/FileAppender.java       |  4 +-
 .../log4j/core/appender/NullAppender.java       |  4 +-
 .../core/appender/RollingFileAppender.java      |  4 +-
 7 files changed, 122 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ea6ad94e/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 32c5166..27c7807 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
@@ -25,6 +25,9 @@ import java.util.Properties;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.appender.ConsoleAppender;
+import org.apache.logging.log4j.core.appender.FileAppender;
+import org.apache.logging.log4j.core.appender.NullAppender;
+import org.apache.logging.log4j.core.appender.RollingFileAppender;
 import org.apache.logging.log4j.core.config.ConfigurationException;
 import 
org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder;
 import org.apache.logging.log4j.core.config.builder.api.ComponentBuilder;
@@ -43,6 +46,11 @@ import org.apache.logging.log4j.status.StatusLogger;
  */
 public class Log4j1ConfigurationParser {
 
+       private static final String ROOTLOGGER = "rootLogger";
+       private static final String ROOTCATEGORY = "rootCategory";
+       private static final String TRUE = "true";
+       private static final String FALSE = "false";
+       
        private final Properties properties = new Properties();
        private StrSubstitutor strSubstitutor;
        
@@ -65,8 +73,8 @@ public class Log4j1ConfigurationParser {
                        throws IOException {
                properties.load(input);
                strSubstitutor = new StrSubstitutor(properties);
-               final String rootCategoryValue = getLog4jValue("rootCategory");
-               final String rootLoggerValue = getLog4jValue("rootLogger");
+               final String rootCategoryValue = getLog4jValue(ROOTCATEGORY);
+               final String rootLoggerValue = getLog4jValue(ROOTLOGGER);
                if (rootCategoryValue == null && rootLoggerValue == null) {
                        // This is not a Log4j 1 properties configuration file.
                        throw new ConfigurationException("Input does not 
contain a valid Log4j 1.x properties configuration");
@@ -78,8 +86,8 @@ public class Log4j1ConfigurationParser {
                        builder.setStatusLevel(Level.DEBUG);
                }
                // Root
-               final String[] sortedAppenderNamesC = 
buildRootLogger(getLog4jValue("rootCategory"));
-               final String[] sortedAppenderNamesL = 
buildRootLogger(getLog4jValue("rootLogger"));
+               final String[] sortedAppenderNamesC = 
buildRootLogger(getLog4jValue(ROOTCATEGORY));
+               final String[] sortedAppenderNamesL = 
buildRootLogger(getLog4jValue(ROOTLOGGER));
                final String[] sortedAppenderNames = 
sortedAppenderNamesL.length > 0 ? sortedAppenderNamesL
                                : sortedAppenderNamesC;
                // Appenders
@@ -127,6 +135,9 @@ public class Log4j1ConfigurationParser {
                case "org.apache.log4j.FileAppender":
                        buildFileAppender(appenderName);
                        break;
+               case "org.apache.log4j.DailyRollingFileAppender":
+                       buildDailyRollingFileAppender(appenderName);
+                       break;
                case "org.apache.log4j.RollingFileAppender":
                        buildRollingFileAppender(appenderName);
                        break;
@@ -139,7 +150,7 @@ public class Log4j1ConfigurationParser {
        }
 
        private void buildConsoleAppender(final String appenderName) {
-               final AppenderComponentBuilder appenderBuilder = 
builder.newAppender(appenderName, "Console");
+               final AppenderComponentBuilder appenderBuilder = 
builder.newAppender(appenderName, ConsoleAppender.PLUGIN_NAME);
                final String targetValue = getLog4jAppenderValue(appenderName, 
"Target", "System.out");
                if (targetValue != null) {
                        final ConsoleAppender.Target target;
@@ -159,7 +170,7 @@ public class Log4j1ConfigurationParser {
                        }
                }
                buildAttribute(appenderName, appenderBuilder, "Follow", 
"follow");
-               if 
("false".equalsIgnoreCase(getLog4jAppenderValue(appenderName, 
"ImmediateFlush"))) {
+               if (FALSE.equalsIgnoreCase(getLog4jAppenderValue(appenderName, 
"ImmediateFlush"))) {
                        reportWarning("ImmediateFlush=false is not supported on 
Console appender");
                }
                buildAppenderLayout(appenderName, appenderBuilder);
@@ -167,7 +178,7 @@ public class Log4j1ConfigurationParser {
        }
 
        private void buildFileAppender(final String appenderName) {
-               final AppenderComponentBuilder appenderBuilder = 
builder.newAppender(appenderName, "File");
+               final AppenderComponentBuilder appenderBuilder = 
builder.newAppender(appenderName, FileAppender.PLUGIN_NAME);
                buildFileAppender(appenderName, appenderBuilder);
                builder.add(appenderBuilder);
        }
@@ -181,8 +192,22 @@ public class Log4j1ConfigurationParser {
                buildAppenderLayout(appenderName, appenderBuilder);
        }
 
+       private void buildDailyRollingFileAppender(final String appenderName) {
+               final AppenderComponentBuilder appenderBuilder = 
builder.newAppender(appenderName, RollingFileAppender.PLUGIN_NAME);
+               buildFileAppender(appenderName, appenderBuilder);
+               final String fileName = getLog4jAppenderValue(appenderName, 
"File");
+               final String datePattern = getLog4jAppenderValue(appenderName, 
"DatePattern", fileName + "'.'yyyy-MM-dd");
+               appenderBuilder.addAttribute("filePattern", fileName + "%d{" + 
datePattern + "}");
+               final ComponentBuilder<?> triggeringPolicy = 
builder.newComponent("Policies").addComponent(
+                               
builder.newComponent("TimeBasedTriggeringPolicy").addAttribute("modulate", 
true));
+               appenderBuilder.addComponent(triggeringPolicy);
+               appenderBuilder.addComponent(
+                               
builder.newComponent("DefaultRolloverStrategy").addAttribute("max", 
Integer.MAX_VALUE));
+               builder.add(appenderBuilder);
+       }
+
        private void buildRollingFileAppender(final String appenderName) {
-               final AppenderComponentBuilder appenderBuilder = 
builder.newAppender(appenderName, "RollingFile");
+               final AppenderComponentBuilder appenderBuilder = 
builder.newAppender(appenderName, RollingFileAppender.PLUGIN_NAME);
                buildFileAppender(appenderName, appenderBuilder);
                final String fileName = getLog4jAppenderValue(appenderName, 
"File");
                appenderBuilder.addAttribute("filePattern", fileName + ".%i");
@@ -221,7 +246,7 @@ public class Log4j1ConfigurationParser {
        }
 
        private void buildNullAppender(String appenderName) {
-               final AppenderComponentBuilder appenderBuilder = 
builder.newAppender(appenderName, "Null");
+               final AppenderComponentBuilder appenderBuilder = 
builder.newAppender(appenderName, NullAppender.PLUGIN_NAME);
                builder.add(appenderBuilder);
        }
 
@@ -256,14 +281,14 @@ public class Log4j1ConfigurationParser {
                        }
                        case "org.apache.log4j.TTCCLayout": {
                                String pattern = "%r ";
-                               if 
(Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.ThreadPrinting", 
"true"))) {
+                               if 
(Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.ThreadPrinting", 
TRUE))) {
                                        pattern += "[%t] ";
                                }
                                pattern += "%p ";
-                               if 
(Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.CategoryPrefixing", 
"true"))) {
+                               if 
(Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.CategoryPrefixing", 
TRUE))) {
                                        pattern += "%c ";
                                }
-                               if 
(Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.ContextPrinting", 
"true"))) {
+                               if 
(Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.ContextPrinting", 
TRUE))) {
                                        pattern += "%notEmpty{%ndc }";
                                }
                                pattern += "- %m%n";
@@ -274,16 +299,16 @@ public class Log4j1ConfigurationParser {
                                final LayoutComponentBuilder htmlLayout = 
builder.newLayout("HtmlLayout");
                                htmlLayout.addAttribute("title", 
getLog4jAppenderValue(name, "layout.Title", "Log4J Log Messages"));
                                htmlLayout.addAttribute("locationInfo",
-                                               
Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.LocationInfo", 
"false")));
+                                               
Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.LocationInfo", 
FALSE)));
                                appenderBuilder.add(htmlLayout);
                                break;
                        }
                        case "org.apache.log4j.xml.XMLLayout": {
                                final LayoutComponentBuilder xmlLayout = 
builder.newLayout("Log4j1XmlLayout");
                                xmlLayout.addAttribute("locationInfo",
-                                               
Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.LocationInfo", 
"false")));
+                                               
Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.LocationInfo", 
FALSE)));
                                xmlLayout.addAttribute("properties",
-                                               
Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.Properties", 
"false")));
+                                               
Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.Properties", FALSE)));
                                appenderBuilder.add(xmlLayout);
                                break;
                        }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ea6ad94e/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 8c6260d..1e5ff36 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
@@ -37,12 +37,12 @@ import 
org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy;
 import org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy;
 import org.apache.logging.log4j.core.appender.rolling.RolloverStrategy;
 import 
org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy;
+import 
org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy;
 import org.apache.logging.log4j.core.appender.rolling.TriggeringPolicy;
 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.Ignore;
 import org.junit.Test;
 
 public class Log4j1ConfigurationFactoryTest {
@@ -56,6 +56,8 @@ public class Log4j1ConfigurationFactoryTest {
                final LoggerConfig loggerConfig = 
configuration.getLoggerConfig("com.example.foo");
                assertNotNull(loggerConfig);
                assertEquals(Level.DEBUG, loggerConfig.getLevel());
+               configuration.start();
+               configuration.stop();
                return appender.getLayout();
        }
 
@@ -68,6 +70,8 @@ public class Log4j1ConfigurationFactoryTest {
                final LoggerConfig loggerConfig = 
configuration.getLoggerConfig("com.example.foo");
                assertNotNull(loggerConfig);
                assertEquals(Level.DEBUG, loggerConfig.getLevel());
+               configuration.start();
+               configuration.stop();
                return appender.getLayout();
        }
 
@@ -136,23 +140,28 @@ public class Log4j1ConfigurationFactoryTest {
 
        @Test
        public void testRollingFileAppender() throws Exception {
-               
testRollingFileAppender("config-1.2/log4j-RollingFileAppender.properties");
+               
testRollingFileAppender("config-1.2/log4j-RollingFileAppender.properties", 
"RFA", "./hadoop.log.%i");
+       }
+
+       @Test
+       public void testDailyRollingFileAppender() throws Exception {
+               
testDailyRollingFileAppender("config-1.2/log4j-DailyRollingFileAppender.properties",
 "DRFA", "./hadoop.log%d{.yyyy-MM-dd}");
        }
 
        @Test
        public void testRollingFileAppenderWithProperties() throws Exception {
-               
testRollingFileAppender("config-1.2/log4j-RollingFileAppender-with-props.properties");
+               
testRollingFileAppender("config-1.2/log4j-RollingFileAppender-with-props.properties",
 "RFA", "./hadoop.log.%i");
        }
 
-       private void testRollingFileAppender(final String configResource) 
throws URISyntaxException {
+       private void testRollingFileAppender(final String configResource, final 
String name, final String filePattern) throws URISyntaxException {
                final Configuration configuration = configure(configResource);
-               final Appender appender = configuration.getAppender("RFA");
+               final Appender appender = configuration.getAppender(name);
                assertNotNull(appender);
-               assertEquals("RFA", appender.getName());
+               assertEquals(name, appender.getName());
                assertTrue(appender.getClass().getName(), appender instanceof 
RollingFileAppender);
                final RollingFileAppender rfa = (RollingFileAppender) appender;
                assertEquals("./hadoop.log", rfa.getFileName());
-               assertEquals("./hadoop.log.%i", rfa.getFilePattern());
+               assertEquals(filePattern, rfa.getFilePattern());
                final TriggeringPolicy triggeringPolicy = 
rfa.getTriggeringPolicy();
                assertNotNull(triggeringPolicy);
                assertTrue(triggeringPolicy.getClass().getName(), 
triggeringPolicy instanceof CompositeTriggeringPolicy);
@@ -167,6 +176,35 @@ public class Log4j1ConfigurationFactoryTest {
                assertTrue(rolloverStrategy.getClass().getName(), 
rolloverStrategy instanceof DefaultRolloverStrategy);
                final DefaultRolloverStrategy drs = (DefaultRolloverStrategy) 
rolloverStrategy;
                assertEquals(20, drs.getMaxIndex());
+               configuration.start();
+               configuration.stop();
+       }
+
+       private void testDailyRollingFileAppender(final String configResource, 
final String name, final String filePattern) throws URISyntaxException {
+               final Configuration configuration = configure(configResource);
+               final Appender appender = configuration.getAppender(name);
+               assertNotNull(appender);
+               assertEquals(name, appender.getName());
+               assertTrue(appender.getClass().getName(), appender instanceof 
RollingFileAppender);
+               final RollingFileAppender rfa = (RollingFileAppender) appender;
+               assertEquals("./hadoop.log", rfa.getFileName());
+               assertEquals(filePattern, rfa.getFilePattern());
+               final TriggeringPolicy triggeringPolicy = 
rfa.getTriggeringPolicy();
+               assertNotNull(triggeringPolicy);
+               assertTrue(triggeringPolicy.getClass().getName(), 
triggeringPolicy instanceof CompositeTriggeringPolicy);
+               final CompositeTriggeringPolicy ctp = 
(CompositeTriggeringPolicy) triggeringPolicy;
+               final TriggeringPolicy[] triggeringPolicies = 
ctp.getTriggeringPolicies();
+               assertEquals(1, triggeringPolicies.length);
+               final TriggeringPolicy tp = triggeringPolicies[0];
+               assertTrue(tp.getClass().getName(), tp instanceof 
TimeBasedTriggeringPolicy);
+               final TimeBasedTriggeringPolicy tbtp = 
(TimeBasedTriggeringPolicy) tp;
+               assertEquals(1, tbtp.getInterval());
+               final RolloverStrategy rolloverStrategy = 
rfa.getManager().getRolloverStrategy();
+               assertTrue(rolloverStrategy.getClass().getName(), 
rolloverStrategy instanceof DefaultRolloverStrategy);
+               final DefaultRolloverStrategy drs = (DefaultRolloverStrategy) 
rolloverStrategy;
+               assertEquals(Integer.MAX_VALUE, drs.getMaxIndex());
+               configuration.start();
+               configuration.stop();
        }
 
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ea6ad94e/log4j-1.2-api/src/test/resources/config-1.2/log4j-DailyRollingFileAppender.properties
----------------------------------------------------------------------
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-DailyRollingFileAppender.properties
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-DailyRollingFileAppender.properties
new file mode 100644
index 0000000..ccadbc8
--- /dev/null
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-DailyRollingFileAppender.properties
@@ -0,0 +1,26 @@
+###############################################################################
+#
+# Log4J 1.2 Configuration.
+#
+
+hadoop.log.dir=.
+hadoop.log.file=hadoop.log
+
+log4j.rootLogger=TRACE, DRFA
+
+#
+# Daily Rolling File Appender
+#
+
+log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}
+
+# Rollover at midnight
+log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
+
+log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout
+
+# Pattern format: Date LogLevel LoggerName LogMessage
+log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
+# Debugging Pattern format
+#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} 
(%F:%M(%L)) - %m%n

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ea6ad94e/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
index 195ecbc..e3f3c31 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
@@ -47,9 +47,10 @@ import org.apache.logging.log4j.util.PropertiesUtil;
  * encoding. (RG) Encoding is handled within the Layout. Typically, a Layout 
will generate a String and then call
  * getBytes which may use a configured encoding or the system default. OTOH, a 
Writer cannot print byte streams.
  */
-@Plugin(name = "Console", category = "Core", elementType = "appender", 
printObject = true)
+@Plugin(name = ConsoleAppender.PLUGIN_NAME, category = "Core", elementType = 
"appender", printObject = true)
 public final class ConsoleAppender extends 
AbstractOutputStreamAppender<OutputStreamManager> {
 
+    public static final String PLUGIN_NAME = "Console";
     private static final String JANSI_CLASS = 
"org.fusesource.jansi.WindowsAnsiOutputStream";
     private static ConsoleManagerFactory factory = new ConsoleManagerFactory();
     private static final Target DEFAULT_TARGET = Target.SYSTEM_OUT;

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ea6ad94e/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
index 46146f9..860f4e5 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
@@ -36,9 +36,11 @@ import org.apache.logging.log4j.core.util.Integers;
 /**
  * File Appender.
  */
-@Plugin(name = "File", category = "Core", elementType = "appender", 
printObject = true)
+@Plugin(name = FileAppender.PLUGIN_NAME, category = "Core", elementType = 
"appender", printObject = true)
 public final class FileAppender extends 
AbstractOutputStreamAppender<FileManager> {
 
+    public static final String PLUGIN_NAME = "File";
+
     /**
      * Builds FileAppender instances.
      * 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ea6ad94e/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/NullAppender.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/NullAppender.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/NullAppender.java
index ad89b96..9cd1115 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/NullAppender.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/NullAppender.java
@@ -8,9 +8,11 @@ import 
org.apache.logging.log4j.core.config.plugins.PluginFactory;
 /**
  * An Appender that ignores log events. Use for compatibility with version 1.2.
  */
-@Plugin(name = "Null", category = "Core", elementType = "appender", 
printObject = true)
+@Plugin(name = NullAppender.PLUGIN_NAME, category = "Core", elementType = 
"appender", printObject = true)
 public class NullAppender extends AbstractAppender {
 
+    public static final String PLUGIN_NAME = "Null";
+
     @PluginFactory
     public static NullAppender createAppender(@PluginAttribute("name") final 
String name) {
         return new NullAppender(name);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ea6ad94e/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
index 0fc7a52..f317b6b 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
@@ -43,9 +43,11 @@ import org.apache.logging.log4j.core.util.Integers;
 /**
  * An appender that writes to files and can roll over at intervals.
  */
-@Plugin(name = "RollingFile", category = "Core", elementType = "appender", 
printObject = true)
+@Plugin(name = RollingFileAppender.PLUGIN_NAME, category = "Core", elementType 
= "appender", printObject = true)
 public final class RollingFileAppender extends 
AbstractOutputStreamAppender<RollingFileManager> {
 
+    public static final String PLUGIN_NAME = "RollingFile";
+
     /**
      * Builds FileAppender instances.
      * 

Reply via email to