To facilitate things, I created an AbstractTriggeringPolicy that extends AbstractLifeCycle; that should help future-proof changes to some extent.
Are you thinking about something like public interface "TriggeringPolicy2 extends TriggeringPolicy, LifeCycle"? Gary On Wed, Sep 7, 2016 at 11:38 AM, Remko Popma <remko.po...@gmail.com> wrote: > I'm okay with most of this except for the part where we modify the > TriggeringPolicy interface. > I'm sure there is a way to accomplish the goal without breaking binary > compatibility. > With the AbstractTriggeringPolicy introduced in a later commit, probably > all that remains is to use "instanceof LifeCycle" in places where we need > to call the LifeCycle methods on the TriggeringPolicy. > > On Wed, Sep 7, 2016 at 9:03 AM, <ggreg...@apache.org> wrote: > >> Repository: logging-log4j2 >> Updated Branches: >> refs/heads/master 7dd6d7ac8 -> ea302f26a >> >> >> [LOG4J2-1259] Log4j threads are leaking on tomcat shutdown. >> TriggeringPolicy now implement LiceCycle which has a stop(long, >> TimeUnit) method. This TriggeringPolicy.stop(long, TimeUnit) method can >> then be called from RollingFileManager.releaseSub(long timeout, TimeUnit >> timeUnit). >> >> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo >> Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit >> /ea302f26 >> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/ea302f26 >> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/ea302f26 >> >> Branch: refs/heads/master >> Commit: ea302f26ade9600f4dacfbeebb7e96ee5d15a924 >> Parents: 7dd6d7a >> Author: Gary Gregory <ggreg...@apache.org> >> Authored: Tue Sep 6 20:03:14 2016 -0400 >> Committer: Gary Gregory <ggreg...@apache.org> >> Committed: Tue Sep 6 20:03:14 2016 -0400 >> >> ---------------------------------------------------------------------- >> .../rolling/CompositeTriggeringPolicy.java | 169 +++++++-------- >> .../appender/rolling/CronTriggeringPolicy.java | 44 +++- >> .../rolling/OnStartupTriggeringPolicy.java | 3 +- >> .../appender/rolling/RollingFileManager.java | 7 + >> .../rolling/SizeBasedTriggeringPolicy.java | 207 >> +++++++++---------- >> .../rolling/TimeBasedTriggeringPolicy.java | 3 +- >> .../core/appender/rolling/TriggeringPolicy.java | 3 +- >> 7 files changed, 232 insertions(+), 204 deletions(-) >> ---------------------------------------------------------------------- >> >> >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e >> a302f26/log4j-core/src/main/java/org/apache/logging/log4j/co >> re/appender/rolling/CompositeTriggeringPolicy.java >> ---------------------------------------------------------------------- >> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/CompositeTriggeringPolicy.java >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/CompositeTriggeringPolicy.java >> index 0ce04de..09133ed 100644 >> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/CompositeTriggeringPolicy.java >> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/CompositeTriggeringPolicy.java >> @@ -1,84 +1,85 @@ >> -/* >> - * 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 java.util.Arrays; >> - >> -import org.apache.logging.log4j.core.LogEvent; >> -import org.apache.logging.log4j.core.config.plugins.Plugin; >> -import org.apache.logging.log4j.core.config.plugins.PluginElement; >> -import org.apache.logging.log4j.core.config.plugins.PluginFactory; >> - >> -/** >> - * Triggering policy that wraps other policies. >> - */ >> -@Plugin(name = "Policies", category = "Core", printObject = true) >> -public final class CompositeTriggeringPolicy implements TriggeringPolicy >> { >> - >> - private final TriggeringPolicy[] triggeringPolicy; >> - >> - private CompositeTriggeringPolicy(final TriggeringPolicy... >> policies) { >> - this.triggeringPolicy = policies; >> - } >> - >> - public TriggeringPolicy[] getTriggeringPolicies() { >> - return triggeringPolicy; >> - } >> - >> - /** >> - * Initializes the policy. >> - * @param manager The RollingFileManager. >> - */ >> - @Override >> - public void initialize(final RollingFileManager manager) { >> - for (final TriggeringPolicy policy : triggeringPolicy) { >> - policy.initialize(manager); >> - } >> - } >> - >> - /** >> - * Determines if a rollover should occur. >> - * @param event A reference to the currently event. >> - * @return true if a rollover should occur, false otherwise. >> - */ >> - @Override >> - public boolean isTriggeringEvent(final LogEvent event) { >> - for (final TriggeringPolicy policy : triggeringPolicy) { >> - if (policy.isTriggeringEvent(event)) { >> - return true; >> - } >> - } >> - return false; >> - } >> - >> - /** >> - * Create a CompositeTriggeringPolicy. >> - * @param policies The triggering policies. >> - * @return A CompositeTriggeringPolicy. >> - */ >> - @PluginFactory >> - public static CompositeTriggeringPolicy createPolicy( >> - >> @PluginElement("Policies") final TriggeringPolicy... policies) { >> - return new CompositeTriggeringPolicy(policies); >> - } >> - >> - @Override >> - public String toString() { >> - return "CompositeTriggeringPolicy(policies=" + >> Arrays.toString(triggeringPolicy) + ")"; >> - } >> - >> -} >> +/* >> + * 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 java.util.Arrays; >> + >> +import org.apache.logging.log4j.core.AbstractLifeCycle; >> +import org.apache.logging.log4j.core.LogEvent; >> +import org.apache.logging.log4j.core.config.plugins.Plugin; >> +import org.apache.logging.log4j.core.config.plugins.PluginElement; >> +import org.apache.logging.log4j.core.config.plugins.PluginFactory; >> + >> +/** >> + * Triggering policy that wraps other policies. >> + */ >> +@Plugin(name = "Policies", category = "Core", printObject = true) >> +public final class CompositeTriggeringPolicy extends AbstractLifeCycle >> implements TriggeringPolicy { >> + >> + private final TriggeringPolicy[] triggeringPolicy; >> + >> + private CompositeTriggeringPolicy(final TriggeringPolicy... >> policies) { >> + this.triggeringPolicy = policies; >> + } >> + >> + public TriggeringPolicy[] getTriggeringPolicies() { >> + return triggeringPolicy; >> + } >> + >> + /** >> + * Initializes the policy. >> + * @param manager The RollingFileManager. >> + */ >> + @Override >> + public void initialize(final RollingFileManager manager) { >> + for (final TriggeringPolicy policy : triggeringPolicy) { >> + policy.initialize(manager); >> + } >> + } >> + >> + /** >> + * Determines if a rollover should occur. >> + * @param event A reference to the currently event. >> + * @return true if a rollover should occur, false otherwise. >> + */ >> + @Override >> + public boolean isTriggeringEvent(final LogEvent event) { >> + for (final TriggeringPolicy policy : triggeringPolicy) { >> + if (policy.isTriggeringEvent(event)) { >> + return true; >> + } >> + } >> + return false; >> + } >> + >> + /** >> + * Create a CompositeTriggeringPolicy. >> + * @param policies The triggering policies. >> + * @return A CompositeTriggeringPolicy. >> + */ >> + @PluginFactory >> + public static CompositeTriggeringPolicy createPolicy( >> + >> @PluginElement("Policies") final TriggeringPolicy... policies) { >> + return new CompositeTriggeringPolicy(policies); >> + } >> + >> + @Override >> + public String toString() { >> + return "CompositeTriggeringPolicy(policies=" + >> Arrays.toString(triggeringPolicy) + ")"; >> + } >> + >> +} >> >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e >> a302f26/log4j-core/src/main/java/org/apache/logging/log4j/co >> re/appender/rolling/CronTriggeringPolicy.java >> ---------------------------------------------------------------------- >> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/CronTriggeringPolicy.java b/log4j-core/src/main/java/org >> /apache/logging/log4j/core/appender/rolling/CronTriggeringPolicy.java >> index c6b2df3..288223c 100644 >> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/CronTriggeringPolicy.java >> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/CronTriggeringPolicy.java >> @@ -19,8 +19,11 @@ package org.apache.logging.log4j.core. >> appender.rolling; >> import java.text.ParseException; >> import java.util.Calendar; >> import java.util.Date; >> +import java.util.concurrent.ExecutionException; >> +import java.util.concurrent.TimeUnit; >> +import java.util.concurrent.TimeoutException; >> >> -import org.apache.logging.log4j.Logger; >> +import org.apache.logging.log4j.core.AbstractLifeCycle; >> import org.apache.logging.log4j.core.LogEvent; >> import org.apache.logging.log4j.core.config.Configuration; >> import org.apache.logging.log4j.core.config.CronScheduledFuture; >> @@ -30,16 +33,14 @@ import org.apache.logging.log4j.core. >> config.plugins.PluginAttribute; >> import org.apache.logging.log4j.core.config.plugins.PluginConfiguration; >> import org.apache.logging.log4j.core.config.plugins.PluginFactory; >> import org.apache.logging.log4j.core.util.CronExpression; >> -import org.apache.logging.log4j.status.StatusLogger; >> >> /** >> * Rolls a file over based on a cron schedule. >> */ >> @Plugin(name = "CronTriggeringPolicy", category = "Core", printObject = >> true) >> @Scheduled >> -public final class CronTriggeringPolicy implements TriggeringPolicy { >> +public final class CronTriggeringPolicy extends AbstractLifeCycle >> implements TriggeringPolicy { >> >> - private static final Logger LOGGER = StatusLogger.getLogger(); >> private static final String defaultSchedule = "0 0 0 * * ?"; >> private RollingFileManager manager; >> private final CronExpression cronExpression; >> @@ -57,7 +58,9 @@ public final class CronTriggeringPolicy implements >> TriggeringPolicy { >> >> /** >> * Initializes the policy. >> - * @param aManager The RollingFileManager. >> + * >> + * @param aManager >> + * The RollingFileManager. >> */ >> @Override >> public void initialize(final RollingFileManager aManager) { >> @@ -74,7 +77,9 @@ public final class CronTriggeringPolicy implements >> TriggeringPolicy { >> >> /** >> * Determines whether a rollover should occur. >> - * @param event A reference to the currently event. >> + * >> + * @param event >> + * A reference to the currently event. >> * @return true if a rollover should occur. >> */ >> @Override >> @@ -88,14 +93,17 @@ public final class CronTriggeringPolicy implements >> TriggeringPolicy { >> >> /** >> * Creates a ScheduledTriggeringPolicy. >> - * @param configuration the Configuration. >> - * @param evaluateOnStartup check if the file should be rolled over >> immediately. >> - * @param schedule the cron expression. >> + * >> + * @param configuration >> + * the Configuration. >> + * @param evaluateOnStartup >> + * check if the file should be rolled over immediately. >> + * @param schedule >> + * the cron expression. >> * @return a ScheduledTriggeringPolicy. >> */ >> @PluginFactory >> - public static CronTriggeringPolicy createPolicy( >> - @PluginConfiguration final Configuration configuration, >> + public static CronTriggeringPolicy createPolicy(@PluginConfiguration >> final Configuration configuration, >> @PluginAttribute("evaluateOnStartup") final String >> evaluateOnStartup, >> @PluginAttribute("schedule") final String schedule) { >> CronExpression cronExpression; >> @@ -133,6 +141,20 @@ public final class CronTriggeringPolicy implements >> TriggeringPolicy { >> } >> >> @Override >> + public boolean stop(long timeout, TimeUnit timeUnit) { >> + setStopping(); >> + if (future != null) { >> + try { >> + future.get(timeout, timeUnit); >> + } catch (InterruptedException | ExecutionException | >> TimeoutException e) { >> + future.cancel(true); >> + } >> + } >> + setStopped(); >> + return true; >> + } >> + >> + @Override >> public String toString() { >> return "CronTriggeringPolicy(schedule=" + >> cronExpression.getCronExpression() + ")"; >> } >> >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e >> a302f26/log4j-core/src/main/java/org/apache/logging/log4j/co >> re/appender/rolling/OnStartupTriggeringPolicy.java >> ---------------------------------------------------------------------- >> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/OnStartupTriggeringPolicy.java >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/OnStartupTriggeringPolicy.java >> index a380028..ae7e439 100644 >> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/OnStartupTriggeringPolicy.java >> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/OnStartupTriggeringPolicy.java >> @@ -18,6 +18,7 @@ package org.apache.logging.log4j.core.appender.rolling; >> >> import java.lang.reflect.Method; >> >> +import org.apache.logging.log4j.core.AbstractLifeCycle; >> import org.apache.logging.log4j.core.LogEvent; >> import org.apache.logging.log4j.core.config.plugins.Plugin; >> import org.apache.logging.log4j.core.config.plugins.PluginAttribute; >> @@ -29,7 +30,7 @@ import org.apache.logging.log4j.status.StatusLogger; >> * Triggers a rollover on every restart, but only if the file size is >> greater than zero. >> */ >> @Plugin(name = "OnStartupTriggeringPolicy", category = "Core", >> printObject = true) >> -public class OnStartupTriggeringPolicy implements TriggeringPolicy { >> +public class OnStartupTriggeringPolicy extends AbstractLifeCycle >> implements TriggeringPolicy { >> >> private static final long JVM_START_TIME = initStartTime(); >> >> >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e >> a302f26/log4j-core/src/main/java/org/apache/logging/log4j/co >> re/appender/rolling/RollingFileManager.java >> ---------------------------------------------------------------------- >> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/RollingFileManager.java b/log4j-core/src/main/java/org >> /apache/logging/log4j/core/appender/rolling/RollingFileManager.java >> index e00319d..be5f2cb 100644 >> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/RollingFileManager.java >> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/RollingFileManager.java >> @@ -24,6 +24,7 @@ import java.io.Serializable; >> import java.nio.ByteBuffer; >> import java.util.concurrent.Future; >> import java.util.concurrent.Semaphore; >> +import java.util.concurrent.TimeUnit; >> import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; >> >> import org.apache.logging.log4j.core.Layout; >> @@ -173,6 +174,12 @@ public class RollingFileManager extends FileManager { >> } >> } >> >> + @Override >> + public void releaseSub(long timeout, TimeUnit timeUnit) { >> + triggeringPolicy.stop(timeout, timeUnit); >> + super.releaseSub(timeout, timeUnit); >> + } >> + >> public synchronized void rollover() { >> if (rollover(rolloverStrategy)) { >> try { >> >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e >> a302f26/log4j-core/src/main/java/org/apache/logging/log4j/co >> re/appender/rolling/SizeBasedTriggeringPolicy.java >> ---------------------------------------------------------------------- >> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/SizeBasedTriggeringPolicy.java >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/SizeBasedTriggeringPolicy.java >> index 712d5a6..a0188e7 100644 >> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/SizeBasedTriggeringPolicy.java >> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/SizeBasedTriggeringPolicy.java >> @@ -1,106 +1,101 @@ >> -/* >> - * 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.Logger; >> -import org.apache.logging.log4j.core.LogEvent; >> -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.status.StatusLogger; >> - >> -/** >> - * >> - */ >> -@Plugin(name = "SizeBasedTriggeringPolicy", category = "Core", >> printObject = true) >> -public class SizeBasedTriggeringPolicy implements TriggeringPolicy { >> - /** >> - * Allow subclasses access to the status logger without creating >> another instance. >> - */ >> - protected static final Logger LOGGER = StatusLogger.getLogger(); >> - >> - /** >> - * Rollover threshold size in bytes. >> - */ >> - private static final long MAX_FILE_SIZE = 10 * 1024 * 1024; // let >> 10 MB the default max size >> - >> - private final long maxFileSize; >> - >> - private RollingFileManager manager; >> - >> - /** >> - * Constructs a new instance. >> - */ >> - protected SizeBasedTriggeringPolicy() { >> - this.maxFileSize = MAX_FILE_SIZE; >> - } >> - >> - /** >> - * Constructs a new instance. >> - * >> - * @param maxFileSize rollover threshold size in bytes. >> - */ >> - protected SizeBasedTriggeringPolicy(final long maxFileSize) { >> - this.maxFileSize = maxFileSize; >> - } >> - >> - public long getMaxFileSize() { >> - return maxFileSize; >> - } >> - >> - /** >> - * Initialize the TriggeringPolicy. >> - * @param aManager The RollingFileManager. >> - */ >> - @Override >> - public void initialize(final RollingFileManager aManager) { >> - this.manager = aManager; >> - } >> - >> - >> - /** >> - * Returns true if a rollover should occur. >> - * @param event A reference to the currently event. >> - * @return true if a rollover should take place, false otherwise. >> - */ >> - @Override >> - public boolean isTriggeringEvent(final LogEvent event) { >> - final boolean triggered = manager.getFileSize() > maxFileSize; >> - if (triggered) { >> - manager.getPatternProcessor().updateTime(); >> - } >> - return triggered; >> - } >> - >> - @Override >> - public String toString() { >> - return "SizeBasedTriggeringPolicy(size=" + maxFileSize + ')'; >> - } >> - >> - /** >> - * Create a SizeBasedTriggeringPolicy. >> - * @param size The size of the file before rollover is required. >> - * @return A SizeBasedTriggeringPolicy. >> - */ >> - @PluginFactory >> - public static SizeBasedTriggeringPolicy >> createPolicy(@PluginAttribute("size") final String size) { >> - >> - final long maxSize = size == null ? MAX_FILE_SIZE : >> FileSize.parse(size, MAX_FILE_SIZE); >> - return new SizeBasedTriggeringPolicy(maxSize); >> - } >> - >> -} >> +/* >> + * 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.core.AbstractLifeCycle; >> +import org.apache.logging.log4j.core.LogEvent; >> +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; >> + >> +/** >> + * >> + */ >> +@Plugin(name = "SizeBasedTriggeringPolicy", category = "Core", >> printObject = true) >> +public class SizeBasedTriggeringPolicy extends AbstractLifeCycle >> implements TriggeringPolicy { >> + >> + /** >> + * Rollover threshold size in bytes. >> + */ >> + private static final long MAX_FILE_SIZE = 10 * 1024 * 1024; // let >> 10 MB the default max size >> + >> + private final long maxFileSize; >> + >> + private RollingFileManager manager; >> + >> + /** >> + * Constructs a new instance. >> + */ >> + protected SizeBasedTriggeringPolicy() { >> + this.maxFileSize = MAX_FILE_SIZE; >> + } >> + >> + /** >> + * Constructs a new instance. >> + * >> + * @param maxFileSize rollover threshold size in bytes. >> + */ >> + protected SizeBasedTriggeringPolicy(final long maxFileSize) { >> + this.maxFileSize = maxFileSize; >> + } >> + >> + public long getMaxFileSize() { >> + return maxFileSize; >> + } >> + >> + /** >> + * Initialize the TriggeringPolicy. >> + * @param aManager The RollingFileManager. >> + */ >> + @Override >> + public void initialize(final RollingFileManager aManager) { >> + this.manager = aManager; >> + } >> + >> + >> + /** >> + * Returns true if a rollover should occur. >> + * @param event A reference to the currently event. >> + * @return true if a rollover should take place, false otherwise. >> + */ >> + @Override >> + public boolean isTriggeringEvent(final LogEvent event) { >> + final boolean triggered = manager.getFileSize() > maxFileSize; >> + if (triggered) { >> + manager.getPatternProcessor().updateTime(); >> + } >> + return triggered; >> + } >> + >> + @Override >> + public String toString() { >> + return "SizeBasedTriggeringPolicy(size=" + maxFileSize + ')'; >> + } >> + >> + /** >> + * Create a SizeBasedTriggeringPolicy. >> + * @param size The size of the file before rollover is required. >> + * @return A SizeBasedTriggeringPolicy. >> + */ >> + @PluginFactory >> + public static SizeBasedTriggeringPolicy >> createPolicy(@PluginAttribute("size") final String size) { >> + >> + final long maxSize = size == null ? MAX_FILE_SIZE : >> FileSize.parse(size, MAX_FILE_SIZE); >> + return new SizeBasedTriggeringPolicy(maxSize); >> + } >> + >> +} >> >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e >> a302f26/log4j-core/src/main/java/org/apache/logging/log4j/co >> re/appender/rolling/TimeBasedTriggeringPolicy.java >> ---------------------------------------------------------------------- >> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/TimeBasedTriggeringPolicy.java >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/TimeBasedTriggeringPolicy.java >> index 2111a77..b9fbdd5 100644 >> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/TimeBasedTriggeringPolicy.java >> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/TimeBasedTriggeringPolicy.java >> @@ -16,6 +16,7 @@ >> */ >> package org.apache.logging.log4j.core.appender.rolling; >> >> +import org.apache.logging.log4j.core.AbstractLifeCycle; >> import org.apache.logging.log4j.core.LogEvent; >> import org.apache.logging.log4j.core.config.plugins.Plugin; >> import org.apache.logging.log4j.core.config.plugins.PluginAttribute; >> @@ -26,7 +27,7 @@ import org.apache.logging.log4j.core.util.Integers; >> * Rolls a file over based on time. >> */ >> @Plugin(name = "TimeBasedTriggeringPolicy", category = "Core", >> printObject = true) >> -public final class TimeBasedTriggeringPolicy implements TriggeringPolicy >> { >> +public final class TimeBasedTriggeringPolicy extends AbstractLifeCycle >> implements TriggeringPolicy { >> >> private long nextRolloverMillis; >> private final int interval; >> >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e >> a302f26/log4j-core/src/main/java/org/apache/logging/log4j/co >> re/appender/rolling/TriggeringPolicy.java >> ---------------------------------------------------------------------- >> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/TriggeringPolicy.java b/log4j-core/src/main/java/org >> /apache/logging/log4j/core/appender/rolling/TriggeringPolicy.java >> index 412099b..9f66c36 100644 >> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/TriggeringPolicy.java >> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app >> ender/rolling/TriggeringPolicy.java >> @@ -16,6 +16,7 @@ >> */ >> package org.apache.logging.log4j.core.appender.rolling; >> >> +import org.apache.logging.log4j.core.LifeCycle; >> import org.apache.logging.log4j.core.LogEvent; >> >> /** >> @@ -23,7 +24,7 @@ import org.apache.logging.log4j.core.LogEvent; >> * occurs. Such conditions include time of day, file size, an >> * external event, the log request or a combination thereof. >> */ >> -public interface TriggeringPolicy { >> +public interface TriggeringPolicy extends LifeCycle { >> >> /** >> * Initializes this triggering policy. >> >> > -- E-Mail: garydgreg...@gmail.com | ggreg...@apache.org Java Persistence with Hibernate, Second Edition <http://www.manning.com/bauer3/> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> Spring Batch in Action <http://www.manning.com/templier/> Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory