1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.appender.rolling;
18
19 import java.util.Arrays;
20 import java.util.concurrent.TimeUnit;
21
22 import org.apache.logging.log4j.core.Core;
23 import org.apache.logging.log4j.core.LifeCycle;
24 import org.apache.logging.log4j.core.LifeCycle2;
25 import org.apache.logging.log4j.core.LogEvent;
26 import org.apache.logging.log4j.core.config.plugins.Plugin;
27 import org.apache.logging.log4j.core.config.plugins.PluginElement;
28 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
29
30
31
32
33 @Plugin(name = "Policies", category = Core.CATEGORY_NAME, printObject = true)
34 public final class CompositeTriggeringPolicy extends AbstractTriggeringPolicy {
35
36 private final TriggeringPolicy[] triggeringPolicies;
37
38 private CompositeTriggeringPolicy(final TriggeringPolicy... triggeringPolicies) {
39 this.triggeringPolicies = triggeringPolicies;
40 }
41
42 public TriggeringPolicy[] getTriggeringPolicies() {
43 return triggeringPolicies;
44 }
45
46
47
48
49
50 @Override
51 public void initialize(final RollingFileManager manager) {
52 for (final TriggeringPolicy triggeringPolicy : triggeringPolicies) {
53 LOGGER.debug("Initializing triggering policy {}", triggeringPolicy.toString());
54 triggeringPolicy.initialize(manager);
55 }
56 }
57
58
59
60
61
62
63 @Override
64 public boolean isTriggeringEvent(final LogEvent event) {
65 for (final TriggeringPolicy triggeringPolicy : triggeringPolicies) {
66 if (triggeringPolicy.isTriggeringEvent(event)) {
67 return true;
68 }
69 }
70 return false;
71 }
72
73
74
75
76
77
78 @PluginFactory
79 public static CompositeTriggeringPolicy createPolicy(
80 @PluginElement("Policies") final TriggeringPolicy... triggeringPolicy) {
81 return new CompositeTriggeringPolicy(triggeringPolicy);
82 }
83
84 @Override
85 public boolean stop(final long timeout, final TimeUnit timeUnit) {
86 setStopping();
87 boolean stopped = true;
88 for (final TriggeringPolicy triggeringPolicy : triggeringPolicies) {
89 if (triggeringPolicy instanceof LifeCycle2) {
90 stopped &= ((LifeCycle2) triggeringPolicy).stop(timeout, timeUnit);
91 } else if (triggeringPolicy instanceof LifeCycle) {
92 ((LifeCycle) triggeringPolicy).stop();
93 stopped &= true;
94 }
95 }
96 setStopped();
97 return stopped;
98 }
99
100 @Override
101 public String toString() {
102 return "CompositeTriggeringPolicy(policies=" + Arrays.toString(triggeringPolicies) + ")";
103 }
104
105 }