Skip to content

Commit 51caae5

Browse files
maarztctrueden
authored andcommitted
AbstractLogService: refactor into smaller methods
Signed-off-by: Curtis Rueden <ctrueden@wisc.edu>
1 parent dc56ade commit 51caae5

File tree

1 file changed

+31
-33
lines changed

1 file changed

+31
-33
lines changed

src/main/java/org/scijava/log/AbstractLogService.java

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ public abstract class AbstractLogService extends AbstractService implements
5151

5252
private int currentLevel = levelFromEnvironment();
5353

54-
private final Map<String, Integer> classAndPackageLevels =
55-
new HashMap<>();
54+
private final Map<String, Integer> classAndPackageLevels;
5655

5756
// -- constructor --
5857

@@ -61,43 +60,21 @@ public AbstractLogService() {
6160
}
6261

6362
public AbstractLogService(final Properties properties) {
64-
// check SciJava log level system properties for initial logging levels
65-
66-
// global log level property
67-
final String logProp = properties.getProperty(LOG_LEVEL_PROPERTY);
68-
final int level = LogLevel.value(logProp);
69-
if (level >= 0) setLevel(level);
70-
71-
if (getLevel() == 0)
72-
setLevel(levelFromEnvironment());
73-
74-
// populate custom class- and package-specific log level properties
75-
final String logLevelPrefix = LOG_LEVEL_PROPERTY + ":";
76-
for (final Object propKey : properties.keySet()) {
77-
if (!(propKey instanceof String)) continue;
78-
final String propName = (String) propKey;
79-
if (!propName.startsWith(logLevelPrefix)) continue;
80-
final String classOrPackageName =
81-
propName.substring(logLevelPrefix.length());
82-
setLevel(classOrPackageName, LogLevel.value(properties.getProperty(propName)));
83-
}
63+
// provide this constructor to enable unit tests
64+
final int level = LogLevel.value(properties.getProperty(
65+
LogService.LOG_LEVEL_PROPERTY));
66+
if (level >= 0) currentLevel = level;
67+
classAndPackageLevels = setupMapFromProperties(properties,
68+
LogService.LOG_LEVEL_PROPERTY + ":");
8469
}
8570

8671
// -- Logger methods --
8772

8873
@Override
8974
public int getLevel() {
90-
if (!classAndPackageLevels.isEmpty()) {
91-
// check for a custom log level for calling class or its parent packages
92-
String classOrPackageName = CallingClassUtils.getCallingClass().getName();
93-
while (classOrPackageName != null) {
94-
final Integer level = classAndPackageLevels.get(classOrPackageName);
95-
if (level != null) return level;
96-
classOrPackageName = parentPackage(classOrPackageName);
97-
}
98-
}
99-
// no custom log level; return the global log level
100-
return currentLevel;
75+
if (classAndPackageLevels.isEmpty()) return currentLevel;
76+
return getLevelForClass(CallingClassUtils.getCallingClass().getName(),
77+
currentLevel);
10178
}
10279

10380
@Override
@@ -120,6 +97,16 @@ protected String getPrefix(final int level) {
12097

12198
// -- Helper methods --
12299

100+
private int getLevelForClass(String classOrPackageName, int defaultLevel) {
101+
// check for a custom log level for calling class or its parent packages
102+
while (classOrPackageName != null) {
103+
final Integer level = classAndPackageLevels.get(classOrPackageName);
104+
if (level != null) return level;
105+
classOrPackageName = parentPackage(classOrPackageName);
106+
}
107+
return defaultLevel;
108+
}
109+
123110
private String parentPackage(final String classOrPackageName) {
124111
final int dot = classOrPackageName.lastIndexOf(".");
125112
if (dot < 0) return null;
@@ -131,4 +118,15 @@ private int levelFromEnvironment() {
131118
return System.getenv("DEBUG") == null ? LogLevel.INFO : LogLevel.DEBUG;
132119
}
133120

121+
private Map<String, Integer> setupMapFromProperties(Properties properties,
122+
String prefix)
123+
{
124+
final HashMap<String, Integer> map = new HashMap<>();
125+
for (final String propName : properties.stringPropertyNames())
126+
if (propName.startsWith(prefix)) {
127+
final String key = propName.substring(prefix.length());
128+
map.put(key, LogLevel.value(properties.getProperty(propName)));
129+
}
130+
return map;
131+
}
134132
}

0 commit comments

Comments
 (0)