From 0f206964e8a696306e5b0e8c6400a21fdfc825ef Mon Sep 17 00:00:00 2001 From: q3769 Date: Thu, 16 Mar 2023 23:42:56 -0500 Subject: [PATCH] bugfix: parsing min level of caller classes that have no package --- pom.xml | 2 +- .../DefaultServiceConfiguration.java | 17 ++++++----------- .../core/configuration/LevelRepository.java | 16 ++++++++++------ .../DefaultServiceConfigurationTest.java | 2 +- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/pom.xml b/pom.xml index 75f2a07..55ec92f 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ io.github.elf4j elf4j-impl-core - 0.5.5 + 0.5.6 jar elf4j-impl-core Native logging service provider implementation of ELF4J (Easy Logging Facade For Java) diff --git a/src/main/java/elf4j/impl/core/configuration/DefaultServiceConfiguration.java b/src/main/java/elf4j/impl/core/configuration/DefaultServiceConfiguration.java index a2251cb..c7629bc 100644 --- a/src/main/java/elf4j/impl/core/configuration/DefaultServiceConfiguration.java +++ b/src/main/java/elf4j/impl/core/configuration/DefaultServiceConfiguration.java @@ -49,16 +49,12 @@ public class DefaultServiceConfiguration implements ServiceConfiguration { * */ public DefaultServiceConfiguration() { - this(new PropertiesLoader()); - } - - DefaultServiceConfiguration(PropertiesLoader propertiesLoader) { - this.propertiesLoader = propertiesLoader; - setRepositories(propertiesLoader.load()); + this.propertiesLoader = new PropertiesLoader(); + setRepositories(this.propertiesLoader.load()); } DefaultServiceConfiguration(LevelRepository levelRepository, WriterRepository writerRepository) { - this(new PropertiesLoader()); + this.propertiesLoader = new PropertiesLoader(); this.levelRepository = levelRepository; this.writerRepository = writerRepository; } @@ -87,11 +83,10 @@ public void refresh(@Nullable Properties properties) { } private boolean loadLoggerConfigurationCache(NativeLogger nativeLogger) { - Level loggerMinimumLevel = levelRepository.getLoggerMinimumLevel(nativeLogger); + Level loggerConfigurationMinimumLevel = levelRepository.getLoggerMinimumLevel(nativeLogger); Level logServiceWriterMinimumLevel = writerRepository.getLogServiceWriter().getMinimumLevel(); - int effectiveMinimumLevelOrdinal = - Math.max(loggerMinimumLevel.ordinal(), logServiceWriterMinimumLevel.ordinal()); - return nativeLogger.getLevel().ordinal() >= effectiveMinimumLevelOrdinal; + return nativeLogger.getLevel().ordinal() >= Math.max(loggerConfigurationMinimumLevel.ordinal(), + logServiceWriterMinimumLevel.ordinal()); } private void setRepositories(@NonNull Properties properties) { diff --git a/src/main/java/elf4j/impl/core/configuration/LevelRepository.java b/src/main/java/elf4j/impl/core/configuration/LevelRepository.java index f5ee15e..de6ac5c 100644 --- a/src/main/java/elf4j/impl/core/configuration/LevelRepository.java +++ b/src/main/java/elf4j/impl/core/configuration/LevelRepository.java @@ -37,7 +37,7 @@ */ public class LevelRepository { private static final Level DEFAULT_LOGGER_MINIMUM_LEVEL = Level.TRACE; - final Map loggerNameValueMap = new HashMap<>(); + final Map loggerMinimumLevels = new HashMap<>(); /** * @param properties configuration source of all minimum output levels for loggers @@ -48,10 +48,11 @@ public LevelRepository(Properties properties) { String[] nameSegments = name.split("@"); switch (nameSegments.length) { case 1: - loggerNameValueMap.put("", Level.valueOf(properties.getProperty("level").trim().toUpperCase())); + loggerMinimumLevels.put("", + Level.valueOf(properties.getProperty("level").trim().toUpperCase())); break; case 2: - loggerNameValueMap.put(nameSegments[1].trim(), + loggerMinimumLevels.put(nameSegments[1].trim(), Level.valueOf(properties.getProperty(name).trim().toUpperCase())); break; default: @@ -68,9 +69,12 @@ public LevelRepository(Properties properties) { public Level getLoggerMinimumLevel(NativeLogger nativeLogger) { String callerClassName = nativeLogger.getName(); int rootPackageLength = callerClassName.indexOf('.'); + if (rootPackageLength == -1) { + rootPackageLength = callerClassName.length(); + } while (callerClassName.length() >= rootPackageLength) { - if (loggerNameValueMap.containsKey(callerClassName)) { - return loggerNameValueMap.get(callerClassName); + if (loggerMinimumLevels.containsKey(callerClassName)) { + return loggerMinimumLevels.get(callerClassName); } if (callerClassName.length() == rootPackageLength) { break; @@ -81,7 +85,7 @@ public Level getLoggerMinimumLevel(NativeLogger nativeLogger) { } callerClassName = callerClassName.substring(0, end); } - Level configuredRootLevel = loggerNameValueMap.get(""); + Level configuredRootLevel = loggerMinimumLevels.get(""); return configuredRootLevel == null ? DEFAULT_LOGGER_MINIMUM_LEVEL : configuredRootLevel; } } diff --git a/src/test/java/elf4j/impl/core/configuration/DefaultServiceConfigurationTest.java b/src/test/java/elf4j/impl/core/configuration/DefaultServiceConfigurationTest.java index c98f846..aaf4c10 100644 --- a/src/test/java/elf4j/impl/core/configuration/DefaultServiceConfigurationTest.java +++ b/src/test/java/elf4j/impl/core/configuration/DefaultServiceConfigurationTest.java @@ -48,7 +48,7 @@ class DefaultServiceConfigurationTest { @Nested class isEnabled { @Test - void loadFromReposOnlyOnce() { + void cacheLoadFromReposOnlyOnce() { DefaultServiceConfiguration defaultLoggingConfiguration = new DefaultServiceConfiguration(mockLevelRepository, mockWriterRepository); NativeLogger nativeLogger = new NativeLogger("test.owner.class.Name", Level.OFF, mockLogService);