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, LocationAwareReliabilityStrategy {
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
68 @Override
69 public void log(final Supplier<LoggerConfig> reconfigured, final String loggerName, final String fqcn,
70 final StackTraceElement location, final Marker marker, final Level level, final Message data,
71 final Throwable t) {
72 loggerConfig.log(loggerName, fqcn, location, marker, level, data, t);
73 }
74
75
76
77
78
79
80
81 @Override
82 public void log(final Supplier<LoggerConfig> reconfigured, final LogEvent event) {
83 loggerConfig.log(event);
84 }
85
86
87
88
89
90
91
92
93 @Override
94 public LoggerConfig getActiveLoggerConfig(final Supplier<LoggerConfig> next) {
95 return this.loggerConfig;
96 }
97
98
99
100
101
102
103 @Override
104 public void afterLogEvent() {
105
106 }
107
108
109
110
111
112
113 @Override
114 public void beforeStopAppenders() {
115
116 }
117
118
119
120
121
122
123
124
125 @Override
126 public void beforeStopConfiguration(final Configuration configuration) {
127
128 if (loggerConfig == configuration.getRootLogger()) {
129 try {
130 Thread.sleep(SLEEP_MILLIS);
131 } catch (final InterruptedException e) {
132 StatusLogger.getLogger().warn("Sleep before stop configuration was interrupted.");
133 }
134 }
135 }
136
137 }