Skip to content

Commit 2a91eee

Browse files
committed
fix incorrect interpretation of Level.OFF and Level.ALL in SLF4JPlatformLogger
Signed-off-by: Ceki Gulcu <[email protected]>
1 parent fa7c18f commit 2a91eee

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

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,23 +116,39 @@ public void log(Level jplLevel, ResourceBundle bundle, String format, Object...
116116
* @param thrown
117117
* @param params
118118
*/
119-
private void log(Level jplLevel, ResourceBundle bundle, String msg, Throwable thrown, Object... params) {
120-
if (jplLevel == Level.OFF)
121-
return;
119+
private void log(final Level jplLevel, final ResourceBundle bundle, final String msg, final Throwable thrown, final Object... params) {
122120

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

128-
org.slf4j.event.Level slf4jLevel = jplLevelToSLF4JLevel(jplLevel);
123+
org.slf4j.event.Level slf4jLevel = jplLevelToSLF4JLevel(jplLevelReduced);
129124
boolean isEnabled = slf4jLogger.isEnabledForLevel(slf4jLevel);
130125

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

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

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,5 +119,18 @@ public void throwTest() throws IOException {
119119
assertTrue(results.get(line++).contains(this.getClass().getName()));
120120
}
121121

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

123136
}

0 commit comments

Comments
 (0)