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 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.PluginAttribute;
22 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
23 import org.apache.logging.log4j.core.util.Integers;
24
25
26
27
28 @Plugin(name = "TimeBasedTriggeringPolicy", category = "Core", printObject = true)
29 public final class TimeBasedTriggeringPolicy implements TriggeringPolicy {
30
31 private long nextRolloverMillis;
32 private final int interval;
33 private final boolean modulate;
34
35 private RollingFileManager manager;
36
37 private TimeBasedTriggeringPolicy(final int interval, final boolean modulate) {
38 this.interval = interval;
39 this.modulate = modulate;
40 }
41
42 public int getInterval() {
43 return interval;
44 }
45
46 public long getNextRolloverMillis() {
47 return nextRolloverMillis;
48 }
49
50
51
52
53
54 @Override
55 public void initialize(final RollingFileManager aManager) {
56 this.manager = aManager;
57
58
59 aManager.getPatternProcessor().getNextTime(aManager.getFileTime(), interval, modulate);
60
61 nextRolloverMillis = aManager.getPatternProcessor().getNextTime(aManager.getFileTime(), interval, modulate);
62 }
63
64
65
66
67
68
69 @Override
70 public boolean isTriggeringEvent(final LogEvent event) {
71 if (manager.getFileSize() == 0) {
72 return false;
73 }
74 final long nowMillis = event.getTimeMillis();
75 if (nowMillis >= nextRolloverMillis) {
76 nextRolloverMillis = manager.getPatternProcessor().getNextTime(nowMillis, interval, modulate);
77 return true;
78 }
79 return false;
80 }
81
82
83
84
85
86
87
88 @PluginFactory
89 public static TimeBasedTriggeringPolicy createPolicy(
90 @PluginAttribute("interval") final String interval,
91 @PluginAttribute("modulate") final String modulate) {
92 final int increment = Integers.parseInt(interval, 1);
93 final boolean mod = Boolean.parseBoolean(modulate);
94 return new TimeBasedTriggeringPolicy(increment, mod);
95 }
96
97 @Override
98 public String toString() {
99 return "TimeBasedTriggeringPolicy(nextRolloverMillis=" + nextRolloverMillis + ", interval=" + interval
100 + ", modulate=" + modulate + ")";
101 }
102
103 }