|
20 | 20 | import java.io.InputStream;
|
21 | 21 | import java.net.URL;
|
22 | 22 | import java.util.ArrayList;
|
| 23 | +import java.util.Collection; |
23 | 24 | import java.util.Collections;
|
| 25 | +import java.util.LinkedHashMap; |
24 | 26 | import java.util.List;
|
| 27 | +import java.util.Map; |
25 | 28 | import java.util.Set;
|
26 | 29 |
|
27 | 30 | import org.apache.logging.log4j.Level;
|
|
31 | 34 | import org.apache.logging.log4j.core.LogEvent;
|
32 | 35 | import org.apache.logging.log4j.core.Logger;
|
33 | 36 | import org.apache.logging.log4j.core.LoggerContext;
|
34 |
| -import org.apache.logging.log4j.core.config.Configuration; |
35 | 37 | import org.apache.logging.log4j.core.config.ConfigurationFactory;
|
36 | 38 | import org.apache.logging.log4j.core.config.ConfigurationSource;
|
37 | 39 | import org.apache.logging.log4j.core.config.LoggerConfig;
|
38 | 40 | import org.apache.logging.log4j.core.filter.AbstractFilter;
|
| 41 | +import org.apache.logging.log4j.core.util.NameUtil; |
39 | 42 | import org.apache.logging.log4j.message.Message;
|
40 | 43 |
|
41 | 44 | import org.springframework.boot.logging.LogFile;
|
@@ -221,30 +224,65 @@ public void setLogLevel(String loggerName, LogLevel logLevel) {
|
221 | 224 |
|
222 | 225 | @Override
|
223 | 226 | public List<LoggerConfiguration> getLoggerConfigurations() {
|
| 227 | + Map<String, LoggerConfig> allLoggers = getAllLoggers(); |
224 | 228 | List<LoggerConfiguration> result = new ArrayList<>();
|
225 |
| - Configuration configuration = getLoggerContext().getConfiguration(); |
226 |
| - for (LoggerConfig loggerConfig : configuration.getLoggers().values()) { |
227 |
| - result.add(convertLoggerConfiguration(loggerConfig)); |
228 |
| - } |
| 229 | + allLoggers.forEach((key, value) -> result.add(convertLoggerConfiguration(value, key))); |
229 | 230 | result.sort(CONFIGURATION_COMPARATOR);
|
230 | 231 | return result;
|
231 | 232 | }
|
232 | 233 |
|
| 234 | + private Map<String, LoggerConfig> getAllLoggers() { |
| 235 | + Collection<Logger> loggers = getLoggerContext().getLoggers(); |
| 236 | + Map<String, LoggerConfig> configuredLoggers = getLoggerContext().getConfiguration().getLoggers(); |
| 237 | + Map<String, LoggerConfig> result = new LinkedHashMap<>(); |
| 238 | + for (Logger logger : loggers) { |
| 239 | + String name = logger.getName(); |
| 240 | + while (name != null) { |
| 241 | + result.putIfAbsent(name, getLoggerContext().getConfiguration().getLoggerConfig(name)); |
| 242 | + name = getSubName(name); |
| 243 | + } |
| 244 | + } |
| 245 | + configuredLoggers.keySet().forEach((name) -> { |
| 246 | + String currentName = name; |
| 247 | + while (currentName != null) { |
| 248 | + result.putIfAbsent(currentName, getLoggerContext().getConfiguration().getLoggerConfig(currentName)); |
| 249 | + currentName = getSubName(currentName); |
| 250 | + } |
| 251 | + }); |
| 252 | + return result; |
| 253 | + } |
| 254 | + |
| 255 | + private String getSubName(String name) { |
| 256 | + if (StringUtils.isEmpty(name)) { |
| 257 | + return null; |
| 258 | + } |
| 259 | + int nested = name.lastIndexOf('$'); |
| 260 | + if (nested != -1) { |
| 261 | + return name.substring(0, nested); |
| 262 | + } |
| 263 | + return NameUtil.getSubName(name); |
| 264 | + } |
| 265 | + |
233 | 266 | @Override
|
234 | 267 | public LoggerConfiguration getLoggerConfiguration(String loggerName) {
|
235 |
| - return convertLoggerConfiguration(getLoggerConfig(loggerName)); |
| 268 | + LoggerConfig loggerConfig = getAllLoggers().get(loggerName); |
| 269 | + if (loggerConfig == null) { |
| 270 | + return null; |
| 271 | + } |
| 272 | + return convertLoggerConfiguration(loggerConfig, loggerName); |
236 | 273 | }
|
237 | 274 |
|
238 |
| - private LoggerConfiguration convertLoggerConfiguration(LoggerConfig loggerConfig) { |
| 275 | + private LoggerConfiguration convertLoggerConfiguration(LoggerConfig loggerConfig, String name) { |
239 | 276 | if (loggerConfig == null) {
|
240 | 277 | return null;
|
241 | 278 | }
|
242 | 279 | LogLevel level = LEVELS.convertNativeToSystem(loggerConfig.getLevel());
|
243 |
| - String name = loggerConfig.getName(); |
244 | 280 | if (!StringUtils.hasLength(name) || LogManager.ROOT_LOGGER_NAME.equals(name)) {
|
245 | 281 | name = ROOT_LOGGER_NAME;
|
246 | 282 | }
|
247 |
| - return new LoggerConfiguration(name, level, level); |
| 283 | + boolean isLoggerConfigured = loggerConfig.getName().equals(name); |
| 284 | + LogLevel configuredLevel = (isLoggerConfigured) ? level : null; |
| 285 | + return new LoggerConfiguration(name, configuredLevel, level); |
248 | 286 | }
|
249 | 287 |
|
250 | 288 | @Override
|
|
0 commit comments