View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements. See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache license, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License. You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the license for the specific language governing permissions and
    15   * limitations under the license.
    16   */
    17  package org.apache.logging.log4j.core.appender.rolling;
    18
    19  import org.apache.logging.log4j.core.LogEvent;
    20  import org.apache.logging.log4j.core.config.plugins.Plugin;
    21  import org.apache.logging.log4j.core.config.plugins.PluginElement;
    22  import org.apache.logging.log4j.core.config.plugins.PluginFactory;
    23
    24  /**
    25   * Triggering policy that wraps other policies.
    26   */
    27  @Plugin(name = "Policies", category = "Core", printObject = true)
    28  public final class CompositeTriggeringPolicy implements TriggeringPolicy {
    29
    30      private final TriggeringPolicy[] policies;
    31
    32      private CompositeTriggeringPolicy(final TriggeringPolicy... policies) {
    33          this.policies = policies;
    34      }
    35
    36      /**
    37       * Initializes the policy.
    38       * @param manager The RollingFileManager.
    39       */
    40      @Override
    41      public void initialize(final RollingFileManager manager) {
    42          for (final TriggeringPolicy policy : policies) {
    43              policy.initialize(manager);
    44          }
    45      }
    46
    47      /**
    48       * Determines if a rollover should occur.
    49       * @param event A reference to the currently event.
    50       * @return true if a rollover should occur, false otherwise.
    51       */
    52      @Override
    53      public boolean isTriggeringEvent(final LogEvent event) {
    54          for (final TriggeringPolicy policy : policies) {
    55              if (policy.isTriggeringEvent(event)) {
    56                  return true;
    57              }
    58          }
    59          return false;
    60      }
    61
    62      @Override
    63      public String toString() {
    64          final StringBuilder sb = new StringBuilder("CompositeTriggeringPolicy{");
    65          boolean first = true;
    66          for (final TriggeringPolicy policy : policies) {
    67              if (!first) {
    68                  sb.append(", ");
    69              }
    70              sb.append(policy.toString());
    71              first = false;
    72          }
    73          sb.append('}');
    74          return sb.toString();
    75      }
    76
    77      /**
    78       * Create a CompositeTriggeringPolicy.
    79       * @param policies The triggering policies.
    80       * @return A CompositeTriggeringPolicy.
    81       */
    82      @PluginFactory
    83      public static CompositeTriggeringPolicy createPolicy(
    84                                                  @PluginElement("Policies") final TriggeringPolicy... policies) {
    85          return new CompositeTriggeringPolicy(policies);
    86      }
    87  }