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 nextRollover;
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
43
44
45
46 @Override
47 public void initialize(final RollingFileManager manager) {
48 this.manager = manager;
49
50
51 manager.getPatternProcessor().getNextTime(manager.getFileTime(), interval, modulate);
52
53 nextRollover = manager.getPatternProcessor().getNextTime(manager.getFileTime(), interval, modulate);
54 }
55
56
57
58
59
60
61 @Override
62 public boolean isTriggeringEvent(final LogEvent event) {
63 if (manager.getFileSize() == 0) {
64 return false;
65 }
66 final long now = event.getTimeMillis();
67 if (now > nextRollover) {
68 nextRollover = manager.getPatternProcessor().getNextTime(now, interval, modulate);
69 return true;
70 }
71 return false;
72 }
73
74 @Override
75 public String toString() {
76 return "TimeBasedTriggeringPolicy";
77 }
78
79
80
81
82
83
84
85 @PluginFactory
86 public static TimeBasedTriggeringPolicy createPolicy(
87 @PluginAttribute("interval") final String interval,
88 @PluginAttribute("modulate") final String modulate) {
89 final int increment = Integers.parseInt(interval, 1);
90 final boolean mod = Boolean.parseBoolean(modulate);
91 return new TimeBasedTriggeringPolicy(increment, mod);
92 }
93 }