Skip to content

Commit f8c9537

Browse files
Merge pull request #1211 from folio-org/RMB-1036-ramsons
RMB-1036: Initialize loggers before setting log level (Ramsons)
2 parents 234d68b + 54d4182 commit f8c9537

3 files changed

Lines changed: 45 additions & 14 deletions

File tree

domain-models-api-interfaces/ramls/admin.raml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ traits:
4040
example: "Internal server error, contact administrator"
4141
/loglevel:
4242
put:
43-
description: Set logging level for all loggers in the JVM or just for a specific package / class
43+
description: Set logging level for the comma separated list of class names. Use * as tailing wildcard to match all or specific loggers provided they have been used since startup
4444
is: [log-level]
4545
responses:
4646
200:

domain-models-runtime/src/main/java/org/folio/rest/tools/utils/LogUtil.java

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -120,26 +120,39 @@ private static String injectDeploymentId(){
120120

121121
/**
122122
* Update the log level for all packages / a specific package / a specific class
123-
* @param packageName - pass "*" for all packages
123+
* @param packageNames - pass "*" for all packages, use comma to separate multiple names
124124
* @param level - see {@link Level}
125125
* @return - JsonObject with a list of updated loggers and their levels
126126
*/
127-
public static JsonObject updateLogConfiguration(String packageName, String level){
127+
public static JsonObject updateLogConfiguration(String packageNames, String level) {
128+
var updatedLoggers = new JsonObject();
129+
if (packageNames == null) {
130+
return updatedLoggers;
131+
}
132+
for (var packageName : packageNames.split(",")) {
133+
updateLogConfiguration(packageName, level, updatedLoggers);
134+
}
135+
return updatedLoggers;
136+
}
137+
138+
private static void updateLogConfiguration(String packageName, String level, JsonObject updatedLoggers) {
139+
var prefix = packageName.replace("*", "");
140+
if (prefix.equals(packageName)) {
141+
// create the logger, it might not have been used since container startup
142+
LogManager.getLogger(packageName);
143+
}
128144

129-
JsonObject updatedLoggers = new JsonObject();
130145
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
131-
Collection<org.apache.logging.log4j.core.Logger> allLoggers = ctx.getLoggers();
132146

133-
allLoggers.forEach( log -> {
134-
if(log != null && packageName != null && (log.getName().startsWith(packageName.replace("*", "")) || "*".equals(packageName)) ){
135-
if(log != null){
136-
log.setLevel(getLog4jLevel(level));
137-
updatedLoggers.put(log.getName(), log.getLevel().toString());
138-
}
147+
for (var log: ctx.getLoggers()) {
148+
if (log == null) {
149+
continue;
139150
}
140-
});
141-
142-
return updatedLoggers;
151+
if (log.getName().startsWith(prefix)) {
152+
log.setLevel(getLog4jLevel(level));
153+
updatedLoggers.put(log.getName(), log.getLevel().toString());
154+
}
155+
}
143156
}
144157

145158
/**

domain-models-runtime/src/test/java/org/folio/rest/tools/utils/LogUtilIT.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,22 @@ public void append(LogEvent event) {
118118
message.append(event.getMessage().getFormattedMessage());
119119
}
120120
}
121+
122+
@Test
123+
void updateLogConfigurationUnused() {
124+
LogUtil.updateLogConfiguration("some.package.UnusedClass", "ERROR");
125+
assertThat(LogManager.getLogger("some.package.UnusedClass").getLevel(), is(Level.ERROR));
126+
}
127+
128+
@Test
129+
void updateLogConfiguration3() {
130+
LogUtil.updateLogConfiguration("foo.X,bar.Y,baz.Z", "WARN");
131+
assertThat(LogManager.getLogger("foo.X").getLevel(), is(Level.WARN));
132+
assertThat(LogManager.getLogger("bar.Y").getLevel(), is(Level.WARN));
133+
assertThat(LogManager.getLogger("baz.Z").getLevel(), is(Level.WARN));
134+
LogUtil.updateLogConfiguration("foo.*,bar.*,baz.*", "DEBUG");
135+
assertThat(LogManager.getLogger("foo.X").getLevel(), is(Level.DEBUG));
136+
assertThat(LogManager.getLogger("bar.Y").getLevel(), is(Level.DEBUG));
137+
assertThat(LogManager.getLogger("baz.Z").getLevel(), is(Level.DEBUG));
138+
}
121139
}

0 commit comments

Comments
 (0)