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", type = "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(int interval, boolean modulate) {
37 this.interval = interval;
38 this.modulate = modulate;
39 }
40
41
42
43
44
45 public void initialize(RollingFileManager manager) {
46 this.manager = manager;
47 nextRollover = manager.getProcessor().getNextTime(manager.getFileTime(), interval, modulate);
48 }
49
50
51
52
53
54
55 public boolean isTriggeringEvent(LogEvent event) {
56 if (manager.getFileSize() == 0) {
57 return false;
58 }
59 long now = System.currentTimeMillis();
60 if (now > nextRollover) {
61 nextRollover = manager.getProcessor().getNextTime(now, interval, modulate);
62 return true;
63 }
64 return false;
65 }
66
67 @Override
68 public String toString() {
69 return "TimeBasedTriggeringPolicy";
70 }
71
72
73
74
75
76 @PluginFactory
77 public static TimeBasedTriggeringPolicy createPolicy(@PluginAttr("interval") String interval,
78 @PluginAttr("modulate") String modulate) {
79 int increment = interval == null ? 1 : Integer.parseInt(interval);
80 boolean mod = modulate == null ? false : Boolean.parseBoolean(modulate);
81 return new TimeBasedTriggeringPolicy(increment, mod);
82 }
83 }