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