[LOG4J2-2009] Rolling appender managers broken on pattern/policy
reconfiguration. Add and @Ignore failing test.

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

Branch: refs/heads/LOG4J2-1431
Commit: b62e627a8456a624f05ff280ec117830de67a3f3
Parents: 6c2492f
Author: Gary Gregory <[email protected]>
Authored: Tue Aug 22 16:07:31 2017 -0600
Committer: Gary Gregory <[email protected]>
Committed: Tue Aug 22 16:07:31 2017 -0600

----------------------------------------------------------------------
 .../RollingFileAppenderUpdateDataTest.java      | 109 +++++++++++++++++++
 1 file changed, 109 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b62e627a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderUpdateDataTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderUpdateDataTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderUpdateDataTest.java
new file mode 100644
index 0000000..4b80e2e
--- /dev/null
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderUpdateDataTest.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+
+package org.apache.logging.log4j.core.appender.rolling;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.appender.ConsoleAppender;
+import org.apache.logging.log4j.core.appender.RollingFileAppender;
+import org.apache.logging.log4j.core.config.Configurator;
+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.impl.BuiltConfiguration;
+import org.junit.Assert;
+import org.junit.Ignore;
+import org.junit.Test;
+
+/**
+ * Tests LOG4J2-2009 Rolling appender managers broken on pattern/policy 
reconfiguration
+ */
+public class RollingFileAppenderUpdateDataTest {
+
+    private ConfigurationBuilder<BuiltConfiguration> buildConfigA() {
+        final ConfigurationBuilder<BuiltConfiguration> builder = 
ConfigurationBuilderFactory.newConfigurationBuilder();
+        builder.setConfigurationName("LOG4J2-1964 demo");
+        builder.setStatusLevel(Level.ERROR);
+        // @formatter:off
+        builder.add(builder.newAppender("consoleLog", "Console")
+            .addAttribute("target", ConsoleAppender.Target.SYSTEM_ERR));
+        builder.add(builder.newAppender("fooAppender", "RollingFile")
+                .addAttribute("fileName", "foo.log")
+                .addAttribute("filePattern", "foo.log.%i")
+                .addComponent(builder.newComponent("SizeBasedTriggeringPolicy")
+                        .addAttribute("size", "10MB")));
+        builder.add(builder.newRootLogger(Level.INFO)
+                .add(builder.newAppenderRef("consoleLog"))
+                .add(builder.newAppenderRef("fooAppender")));
+        // @formatter:on
+        return builder;
+    }
+
+    // rebuild config with date based rollover
+    private ConfigurationBuilder<BuiltConfiguration> buildConfigB() {
+        final ConfigurationBuilder<BuiltConfiguration> builder = 
ConfigurationBuilderFactory.newConfigurationBuilder();
+        builder.setConfigurationName("LOG4J2-1964 demo");
+        builder.setStatusLevel(Level.ERROR);
+        // @formatter:off
+        builder.add(builder.newAppender("consoleLog", "Console")
+                .addAttribute("target", ConsoleAppender.Target.SYSTEM_ERR));
+        builder.add(builder.newAppender("fooAppender", "RollingFile")
+                .addAttribute("fileName", "foo.log")
+                .addAttribute("filePattern", 
"foo.log.%d{yyyy-MM-dd-HH:mm:ss}.%i")
+                .addComponent(builder.newComponent("TimeBasedTriggeringPolicy")
+                        .addAttribute("interval", 5)
+                        .addAttribute("modulate", true)));
+        builder.add(builder.newRootLogger(Level.INFO)
+                .add(builder.newAppenderRef("consoleLog"))
+                .add(builder.newAppenderRef("fooAppender")));
+        // @formatter:on
+        return builder;
+    }
+
+    @Test
+    public void testClosingLoggerContext() {
+        // initial config with indexed rollover
+        try (LoggerContext loggerContext1 = 
Configurator.initialize(buildConfigA().build())) {
+            validateAppender(loggerContext1, "foo.log.%i");
+        }
+
+        // rebuild config with date based rollover
+        try (LoggerContext loggerContext2 = 
Configurator.initialize(buildConfigB().build())) {
+            validateAppender(loggerContext2, 
"foo.log.%d{yyyy-MM-dd-HH:mm:ss}.%i");
+        }
+    }
+
+    @Test
+    @Ignore
+    public void testNotClosingLoggerContext() {
+        // initial config with indexed rollover
+        final LoggerContext loggerContext1 = 
Configurator.initialize(buildConfigA().build());
+        validateAppender(loggerContext1, "foo.log.%i");
+
+        // rebuild config with date based rollover
+        final LoggerContext loggerContext2 = 
Configurator.initialize(buildConfigB().build());
+        validateAppender(loggerContext2, "foo.log.%d{yyyy-MM-dd-HH:mm:ss}.%i");
+    }
+
+    private void validateAppender(final LoggerContext loggerContext1, final 
String expectedFilePattern) {
+        final RollingFileAppender appender = 
loggerContext1.getConfiguration().getAppender("fooAppender");
+        Assert.assertNotNull(appender);
+        Assert.assertEquals(expectedFilePattern, appender.getFilePattern());
+        LogManager.getLogger("root").info("just to show it works.");
+    }
+}

Reply via email to