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 java.lang.reflect.Method;
20
21 import org.apache.logging.log4j.core.LogEvent;
22 import org.apache.logging.log4j.core.config.plugins.Plugin;
23 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
24 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
25 import org.apache.logging.log4j.core.util.Loader;
26 import org.apache.logging.log4j.status.StatusLogger;
27
28
29
30
31 @Plugin(name = "OnStartupTriggeringPolicy", category = "Core", printObject = true)
32 public class OnStartupTriggeringPolicy implements TriggeringPolicy {
33
34 private static final long JVM_START_TIME = initStartTime();
35
36 private final long minSize;
37
38 private OnStartupTriggeringPolicy(long minSize) {
39 this.minSize = minSize;
40 }
41
42
43
44
45
46 private static long initStartTime() {
47
48
49
50
51
52
53 try {
54 final Class<?> factoryClass = Loader.loadSystemClass("java.lang.management.ManagementFactory");
55 final Method getRuntimeMXBean = factoryClass.getMethod("getRuntimeMXBean");
56 final Object runtimeMXBean = getRuntimeMXBean.invoke(null);
57
58 final Class<?> runtimeMXBeanClass = Loader.loadSystemClass("java.lang.management.RuntimeMXBean");
59 final Method getStartTime = runtimeMXBeanClass.getMethod("getStartTime");
60 final Long result = (Long) getStartTime.invoke(runtimeMXBean);
61
62 return result;
63 } catch (final Throwable t) {
64 StatusLogger.getLogger().error("Unable to call ManagementFactory.getRuntimeMXBean().getStartTime(), "
65 + "using system time for OnStartupTriggeringPolicy", t);
66
67 return System.currentTimeMillis();
68 }
69 }
70
71
72
73
74
75 @Override
76 public void initialize(final RollingFileManager manager) {
77 if (manager.getFileTime() < JVM_START_TIME && manager.getFileSize() >= minSize) {
78 if (minSize == 0) {
79 manager.setRenameEmptyFiles(true);
80 }
81 manager.skipFooter(true);
82 manager.rollover();
83 manager.skipFooter(false);
84 }
85 }
86
87
88
89
90
91
92 @Override
93 public boolean isTriggeringEvent(final LogEvent event) {
94 return false;
95 }
96
97 @Override
98 public String toString() {
99 return "OnStartupTriggeringPolicy";
100 }
101
102 @PluginFactory
103 public static OnStartupTriggeringPolicy createPolicy(
104 @PluginAttribute(value = "minSize", defaultLong = 1) final long minSize) {
105 return new OnStartupTriggeringPolicy(minSize);
106 }
107 }