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.Logger;
20 import org.apache.logging.log4j.core.LogEvent;
21 import org.apache.logging.log4j.core.config.plugins.Plugin;
22 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
23 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
24 import org.apache.logging.log4j.status.StatusLogger;
25
26
27
28
29 @Plugin(name = "SizeBasedTriggeringPolicy", category = "Core", printObject = true)
30 public class SizeBasedTriggeringPolicy implements TriggeringPolicy {
31
32
33
34 protected static final Logger LOGGER = StatusLogger.getLogger();
35
36
37
38
39 private static final long MAX_FILE_SIZE = 10 * 1024 * 1024;
40
41 private final long maxFileSize;
42
43 private RollingFileManager manager;
44
45
46
47
48 protected SizeBasedTriggeringPolicy() {
49 this.maxFileSize = MAX_FILE_SIZE;
50 }
51
52
53
54
55
56
57 protected SizeBasedTriggeringPolicy(final long maxFileSize) {
58 this.maxFileSize = maxFileSize;
59 }
60
61 public long getMaxFileSize() {
62 return maxFileSize;
63 }
64
65
66
67
68
69 @Override
70 public void initialize(final RollingFileManager aManager) {
71 this.manager = aManager;
72 }
73
74
75
76
77
78
79
80 @Override
81 public boolean isTriggeringEvent(final LogEvent event) {
82 final boolean triggered = manager.getFileSize() > maxFileSize;
83 if (triggered) {
84 manager.getPatternProcessor().updateTime();
85 }
86 return triggered;
87 }
88
89 @Override
90 public String toString() {
91 return "SizeBasedTriggeringPolicy(size=" + maxFileSize + ')';
92 }
93
94
95
96
97
98
99 @PluginFactory
100 public static SizeBasedTriggeringPolicy createPolicy(@PluginAttribute("size") final String size) {
101
102 final long maxSize = size == null ? MAX_FILE_SIZE : FileSize.parse(size, MAX_FILE_SIZE);
103 return new SizeBasedTriggeringPolicy(maxSize);
104 }
105
106 }