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.PluginAttr;
22 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
23
24
25
26
27 @Plugin(name = "TimeBasedTriggeringPolicy", category = "Core", printObject = true)
28 public final class TimeBasedTriggeringPolicy implements TriggeringPolicy {
29
30 private long nextRollover;
31 private final int interval;
32 private final boolean modulate;
33
34 private RollingFileManager manager;
35
36 private TimeBasedTriggeringPolicy(final int interval, final boolean modulate) {
37 this.interval = interval;
38 this.modulate = modulate;
39 }
40
41
42
43
44
45 @Override
46 public void initialize(final RollingFileManager manager) {
47 this.manager = manager;
48 nextRollover = manager.getProcessor().getNextTime(manager.getFileTime(), interval, modulate);
49 }
50
51
52
53
54
55
56 @Override
57 public boolean isTriggeringEvent(final LogEvent event) {
58 if (manager.getFileSize() == 0) {
59 return false;
60 }
61 final long now = System.currentTimeMillis();
62 if (now > nextRollover) {
63 nextRollover = manager.getProcessor().getNextTime(now, interval, modulate);
64 return true;
65 }
66 return false;
67 }
68
69 @Override
70 public String toString() {
71 return "TimeBasedTriggeringPolicy";
72 }
73
74
75
76
77
78
79
80 @PluginFactory
81 public static TimeBasedTriggeringPolicy createPolicy(@PluginAttr("interval") final String interval,
82 @PluginAttr("modulate") final String modulate) {
83 final int increment = interval == null ? 1 : Integer.parseInt(interval);
84 final boolean mod = modulate == null ? false : Boolean.parseBoolean(modulate);
85 return new TimeBasedTriggeringPolicy(increment, mod);
86 }
87 }