Skip to content

Commit f7b34c2

Browse files
committed
fix incorrect interpretation of Level.OFF and Level.ALL in SLF4JPlatformLogger
Signed-off-by: Ceki Gulcu <ceki@qos.ch>
1 parent 4fa92fc commit f7b34c2

File tree

2 files changed

+37
-8
lines changed

2 files changed

+37
-8
lines changed

slf4j-jdk-platform-logging/src/main/java/org/slf4j/jdk/platform/logging/SLF4JPlatformLogger.java

+24-8
Original file line numberDiff line numberDiff line change
@@ -115,23 +115,39 @@ public void log(Level jplLevel, ResourceBundle bundle, String format, Object...
115115
* @param thrown
116116
* @param params
117117
*/
118-
private void log(Level jplLevel, ResourceBundle bundle, String msg, Throwable thrown, Object... params) {
119-
if (jplLevel == Level.OFF)
120-
return;
118+
private void log(final Level jplLevel, final ResourceBundle bundle, final String msg, final Throwable thrown, final Object... params) {
121119

122-
if (jplLevel == Level.ALL) {
123-
performLog(org.slf4j.event.Level.TRACE, bundle, msg, thrown, params);
124-
return;
125-
}
120+
final Level jplLevelReduced = fixExtremeLevels(jplLevel);
126121

127-
org.slf4j.event.Level slf4jLevel = jplLevelToSLF4JLevel(jplLevel);
122+
org.slf4j.event.Level slf4jLevel = jplLevelToSLF4JLevel(jplLevelReduced);
128123
boolean isEnabled = slf4jLogger.isEnabledForLevel(slf4jLevel);
129124

130125
if (isEnabled) {
131126
performLog(slf4jLevel, bundle, msg, thrown, params);
132127
}
133128
}
134129

130+
/**
131+
* <p>Level.OFF and Level.ALL levels are not supposed to be used when calling log printing methods.
132+
* </p>
133+
*
134+
* <p>We compensate for such incorrect usage by transforming Level.OFF as Level.ERROR and
135+
* Level.ALL as Level.TRACE.
136+
* </p>
137+
*
138+
* @param jplLevel
139+
* @return
140+
*/
141+
private Level fixExtremeLevels(Level jplLevel) {
142+
if (jplLevel == Level.OFF)
143+
return Level.ERROR;
144+
145+
if (jplLevel == Level.ALL)
146+
return Level.TRACE;
147+
148+
return jplLevel;
149+
}
150+
135151
private void performLog(org.slf4j.event.Level slf4jLevel, ResourceBundle bundle, String msg, Throwable thrown, Object... params) {
136152
String message = getResourceStringOrMessage(bundle, msg);
137153
LoggingEventBuilder leb = slf4jLogger.makeLoggingEventBuilder(slf4jLevel);

slf4j-jdk-platform-logging/src/test/java/org/slf4j/jdk/platform/logging/test/SLF4JPlatformLoggingTest.java

+13
Original file line numberDiff line numberDiff line change
@@ -118,5 +118,18 @@ public void throwTest() throws IOException {
118118
assertTrue(results.get(line++).contains(this.getClass().getName()));
119119
}
120120

121+
@Test
122+
public void extremeLevels() throws IOException {
123+
LoggerFinder finder = System.LoggerFinder.getLoggerFinder();
124+
assertEquals(EXPECTED_FINDER_CLASS, finder.getClass().getName());
125+
Logger systemLogger = finder.getLogger("extremeLevels", null);
126+
systemLogger.log(Level.OFF, "hello");
127+
systemLogger.log(Level.ALL, "world");
128+
129+
List<String> results = SPS.stringList;
130+
assertEquals(1, results.size());
131+
assertEquals("ERROR extremeLevels - hello", results.get(0));
132+
133+
}
121134

122135
}

0 commit comments

Comments
 (0)