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