Repository: logging-log4j2 Updated Branches: refs/heads/master b6c67b491 -> 56516ea91
Make sure that IdlePurgePolicy can handle an appender which hang on shutdown Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/c672c93f Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/c672c93f Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/c672c93f Branch: refs/heads/master Commit: c672c93fa5422103fb2e602520de09991a377f11 Parents: 7f64fe8 Author: Mikael Ståldal <mikael.stal...@magine.com> Authored: Tue Dec 1 17:48:36 2015 +0100 Committer: Mikael Ståldal <mikael.stal...@magine.com> Committed: Tue Dec 1 17:48:36 2015 +0100 ---------------------------------------------------------------------- .../log4j/core/appender/HangingAppender.java | 16 ++++++++++++-- .../routing/RoutingAppenderWithPurgingTest.java | 23 ++++++++++++-------- .../src/test/resources/log4j-routing-purge.xml | 10 +++++++++ 3 files changed, 38 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c672c93f/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HangingAppender.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HangingAppender.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HangingAppender.java index a3ebbf0..1707388 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HangingAppender.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HangingAppender.java @@ -33,10 +33,12 @@ public class HangingAppender extends AbstractAppender { private static final long serialVersionUID = 1L; private final long delay; + private final long shutdownDelay; - public HangingAppender(final String name, final long delay) { + public HangingAppender(final String name, final long delay, final long shutdownDelay) { super(name, null, null); this.delay = delay; + this.shutdownDelay = shutdownDelay; } @Override @@ -54,9 +56,19 @@ public class HangingAppender extends AbstractAppender { @Required(message = "No name provided for HangingAppender") final String name, @PluginAttribute("delay") final long delay, + @PluginAttribute("shutdownDelay") final long shutdownDelay, @PluginElement("Layout") final Layout<? extends Serializable> layout, @PluginElement("Filter") final Filter filter) { - return new HangingAppender(name, delay); + return new HangingAppender(name, delay, shutdownDelay); } + @Override + public void stop() { + super.stop(); + try { + Thread.sleep(shutdownDelay); + } catch (InterruptedException ignore) { + // ignore + } + } } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c672c93f/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java index 1c3df3d..f3b2639 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java @@ -16,11 +16,6 @@ */ package org.apache.logging.log4j.core.appender.routing; -import static org.junit.Assert.*; - -import java.io.File; -import java.util.List; - import org.apache.logging.log4j.EventLogger; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.junit.CleanFiles; @@ -32,6 +27,11 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import java.io.File; +import java.util.List; + +import static org.junit.Assert.*; + /** * Testing Routing appender purge facilities */ @@ -47,6 +47,7 @@ public class RoutingAppenderWithPurgingTest { private ListAppender app; private RoutingAppender routingAppenderIdle; + private RoutingAppender routingAppenderIdleWithHangingAppender; private RoutingAppender routingAppenderManual; @Rule @@ -61,6 +62,8 @@ public class RoutingAppenderWithPurgingTest { public void setUp() throws Exception { this.app = this.init.getListAppender("List"); this.routingAppenderIdle = this.init.getRequiredAppender("RoutingPurgeIdle", RoutingAppender.class); + this.routingAppenderIdleWithHangingAppender = + this.init.getRequiredAppender("RoutingPurgeIdleWithHangingAppender", RoutingAppender.class); this.routingAppenderManual = this.init.getRequiredAppender("RoutingPurgeManual", RoutingAppender.class); } @@ -69,7 +72,7 @@ public class RoutingAppenderWithPurgingTest { this.app.clear(); } - @Test + @Test(timeout = 5000) public void routingTest() throws InterruptedException { StructuredDataMessage msg = new StructuredDataMessage("1", "This is a test 1", "Service"); EventLogger.logEvent(msg); @@ -84,18 +87,20 @@ public class RoutingAppenderWithPurgingTest { assertFileExistance(files); assertEquals("Incorrect number of appenders with IdlePurgePolicy.", 3, routingAppenderIdle.getAppenders().size()); + assertEquals("Incorrect number of appenders with IdlePurgePolicy with HangingAppender.", + 3, routingAppenderIdleWithHangingAppender.getAppenders().size()); assertEquals("Incorrect number of appenders manual purge.", 3, routingAppenderManual.getAppenders().size()); - + Thread.sleep(3000); EventLogger.logEvent(msg); - + assertEquals("Incorrect number of appenders with IdlePurgePolicy.", 1, routingAppenderIdle.getAppenders().size()); assertEquals("Incorrect number of appenders with manual purge.", 3, routingAppenderManual.getAppenders().size()); routingAppenderManual.deleteAppender("1"); routingAppenderManual.deleteAppender("2"); routingAppenderManual.deleteAppender("3"); - + assertEquals("Incorrect number of appenders with IdlePurgePolicy.", 1, routingAppenderIdle.getAppenders().size()); assertEquals("Incorrect number of appenders with manual purge.", 0, routingAppenderManual.getAppenders().size()); } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c672c93f/log4j-core/src/test/resources/log4j-routing-purge.xml ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/resources/log4j-routing-purge.xml b/log4j-core/src/test/resources/log4j-routing-purge.xml index 995148b..0efc296 100644 --- a/log4j-core/src/test/resources/log4j-routing-purge.xml +++ b/log4j-core/src/test/resources/log4j-routing-purge.xml @@ -43,6 +43,15 @@ <IdlePurgePolicy timeToLive="2" timeUnit="seconds" /> </Routing> + <Routing name="RoutingPurgeIdleWithHangingAppender"> + <Routes pattern="$${sd:id}"> + <Route> + <Hanging name="Routing-${sd:id}" shutdownDelay="10000"/> + </Route> + </Routes> + <IdlePurgePolicy timeToLive="2" timeUnit="seconds" /> + </Routing> + <Routing name="RoutingPurgeManual"> <Routes pattern="$${sd:id}"> <Route> @@ -59,6 +68,7 @@ <Loggers> <Logger name="EventLogger" level="info" additivity="false"> <AppenderRef ref="RoutingPurgeIdle"/> + <AppenderRef ref="RoutingPurgeIdleWithHangingAppender"/> <AppenderRef ref="RoutingPurgeManual"/> <AppenderRef ref="List"/> </Logger>