Introducing an abstract class implementating both TriggeringPolicy and 
LifeCycle will help future users, that's good. 

I don't think you need another interface. To be backwards compatible we need to 
keep using the existing TriggeringPolicy interface. 

Then, in places where you want to call a LifeCycle method on the 
triggeringPolicy object, you need to check with instanceof before casting to 
LifeCycle and calling the desired method. 

Sent from my iPhone

> On 2016/09/08, at 3:04, Gary Gregory <garydgreg...@gmail.com> wrote:
> 
> 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/ea302f26/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/CompositeTriggeringPolicy.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/CompositeTriggeringPolicy.java
>>>  
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/CompositeTriggeringPolicy.java
>>> index 0ce04de..09133ed 100644
>>> --- 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/CompositeTriggeringPolicy.java
>>> +++ 
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/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/ea302f26/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/CronTriggeringPolicy.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/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/appender/rolling/CronTriggeringPolicy.java
>>> +++ 
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/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/ea302f26/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicy.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicy.java
>>>  
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicy.java
>>> index a380028..ae7e439 100644
>>> --- 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicy.java
>>> +++ 
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/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/ea302f26/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/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/appender/rolling/RollingFileManager.java
>>> +++ 
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/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/ea302f26/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java
>>>  
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java
>>> index 712d5a6..a0188e7 100644
>>> --- 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java
>>> +++ 
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/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/ea302f26/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java
>>>  
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java
>>> index 2111a77..b9fbdd5 100644
>>> --- 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java
>>> +++ 
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/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/ea302f26/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TriggeringPolicy.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/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/appender/rolling/TriggeringPolicy.java
>>> +++ 
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/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
> JUnit in Action, Second Edition
> Spring Batch in Action
> Blog: http://garygregory.wordpress.com 
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory

Reply via email to