1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.logging.log4j.core.config;
19
20 import java.util.Objects;
21
22 import org.apache.logging.log4j.Level;
23 import org.apache.logging.log4j.Marker;
24 import org.apache.logging.log4j.core.LogEvent;
25 import org.apache.logging.log4j.message.Message;
26 import org.apache.logging.log4j.status.StatusLogger;
27 import org.apache.logging.log4j.util.PropertiesUtil;
28 import org.apache.logging.log4j.util.Supplier;
29
30
31
32
33 public class AwaitUnconditionallyReliabilityStrategy implements ReliabilityStrategy {
34
35 private static final long DEFAULT_SLEEP_MILLIS = 5000;
36 private static final long SLEEP_MILLIS = sleepMillis();
37 private final LoggerConfig loggerConfig;
38
39 public AwaitUnconditionallyReliabilityStrategy(final LoggerConfig loggerConfig) {
40 this.loggerConfig = Objects.requireNonNull(loggerConfig, "loggerConfig is null");
41 }
42
43 private static long sleepMillis() {
44 return PropertiesUtil.getProperties().getLongProperty("log4j.waitMillisBeforeStopOldConfig",
45 DEFAULT_SLEEP_MILLIS);
46 }
47
48
49
50
51
52
53
54
55 @Override
56 public void log(final Supplier<LoggerConfig> reconfigured, final String loggerName, final String fqcn, final Marker marker, final Level level,
57 final Message data, final Throwable t) {
58 loggerConfig.log(loggerName, fqcn, marker, level, data, t);
59 }
60
61
62
63
64
65
66
67 @Override
68 public void log(final Supplier<LoggerConfig> reconfigured, final LogEvent event) {
69 loggerConfig.log(event);
70 }
71
72
73
74
75
76
77
78
79 @Override
80 public LoggerConfig getActiveLoggerConfig(final Supplier<LoggerConfig> next) {
81 return this.loggerConfig;
82 }
83
84
85
86
87
88
89 @Override
90 public void afterLogEvent() {
91
92 }
93
94
95
96
97
98
99 @Override
100 public void beforeStopAppenders() {
101
102 }
103
104
105
106
107
108
109
110
111 @Override
112 public void beforeStopConfiguration(final Configuration configuration) {
113
114 if (loggerConfig == configuration.getRootLogger()) {
115 try {
116 Thread.sleep(SLEEP_MILLIS);
117 } catch (final InterruptedException e) {
118 StatusLogger.getLogger().warn("Sleep before stop configuration was interrupted.");
119 }
120 }
121 }
122
123 }