1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.log4j.rolling;
19
20 import java.util.HashSet;
21 import java.util.Iterator;
22 import java.util.Properties;
23 import java.util.Set;
24
25 import org.apache.log4j.Appender;
26 import org.apache.log4j.spi.LoggingEvent;
27 import org.apache.log4j.spi.OptionHandler;
28 import org.apache.log4j.xml.UnrecognizedElementHandler;
29 import org.w3c.dom.Element;
30
31
32 /***
33 * CompositeTriggeringPolicy determines if rolling should be triggered
34 * by evaluating the current event against a set of triggering policies.
35 *
36 * TriggeringPolicy results are OR'd together - if any of the triggering policies report rolling should occur,
37 * a rolling event will be triggered.
38 *
39 */
40 public final class CompositeTriggeringPolicy implements TriggeringPolicy, UnrecognizedElementHandler {
41 Set triggeringPolicies = new HashSet();
42
43 public CompositeTriggeringPolicy() {
44 }
45
46 public boolean isTriggeringEvent(final Appender appender, final LoggingEvent event, final String file, final long fileLength) {
47 boolean isTriggered = false;
48 for (Iterator iter = triggeringPolicies.iterator();iter.hasNext();) {
49 boolean result = ((TriggeringPolicy)iter.next()).isTriggeringEvent(appender, event, file, fileLength);
50 isTriggered = isTriggered || result;
51 }
52 return isTriggered;
53 }
54
55 /***
56 * Add triggering policy
57 *
58 * @param policy
59 */
60 public void addTriggeringPolicy(final TriggeringPolicy policy) {
61 triggeringPolicies.add(policy);
62 }
63
64 public void activateOptions() {
65 for (Iterator iter = triggeringPolicies.iterator();iter.hasNext();) {
66 ((TriggeringPolicy)iter.next()).activateOptions();
67 }
68 }
69
70 public boolean parseUnrecognizedElement(final Element element, final Properties props) throws Exception {
71 final String nodeName = element.getNodeName();
72 if ("triggeringPolicy".equals(nodeName)) {
73 OptionHandler policy = org.apache.log4j.extras.DOMConfigurator.parseElement(element, props, TriggeringPolicy.class);
74 if (policy instanceof TriggeringPolicy) {
75 policy.activateOptions();
76 addTriggeringPolicy((TriggeringPolicy)policy);
77 }
78 return true;
79 }
80 return false;
81 }
82 }