Skip to content

Commit 940c462

Browse files
antonio-tomacceki
authored andcommitted
Avoid potentially "expensive" rendering of message Object to String when log level is disabled SLF4J-497
1 parent 6230948 commit 940c462

File tree

2 files changed

+89
-12
lines changed

2 files changed

+89
-12
lines changed

jcl-over-slf4j/src/main/java/org/apache/commons/logging/impl/SLF4JLocationAwareLog.java

+36-12
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,9 @@ public boolean isFatalEnabled() {
104104
* the message to log. Converted to {@link String}
105105
*/
106106
public void trace(Object message) {
107-
logger.log(null, FQCN, LocationAwareLogger.TRACE_INT, String.valueOf(message), null, null);
107+
if (isTraceEnabled()) {
108+
logger.log(null, FQCN, LocationAwareLogger.TRACE_INT, String.valueOf(message), null, null);
109+
}
108110
}
109111

110112
/**
@@ -117,7 +119,9 @@ public void trace(Object message) {
117119
* the exception to log
118120
*/
119121
public void trace(Object message, Throwable t) {
120-
logger.log(null, FQCN, LocationAwareLogger.TRACE_INT, String.valueOf(message), null, t);
122+
if (isTraceEnabled()) {
123+
logger.log(null, FQCN, LocationAwareLogger.TRACE_INT, String.valueOf(message), null, t);
124+
}
121125
}
122126

123127
/**
@@ -128,7 +132,9 @@ public void trace(Object message, Throwable t) {
128132
* the message to log. Converted to {@link String}
129133
*/
130134
public void debug(Object message) {
131-
logger.log(null, FQCN, LocationAwareLogger.DEBUG_INT, String.valueOf(message), null, null);
135+
if (isDebugEnabled()) {
136+
logger.log(null, FQCN, LocationAwareLogger.DEBUG_INT, String.valueOf(message), null, null);
137+
}
132138
}
133139

134140
/**
@@ -141,7 +147,9 @@ public void debug(Object message) {
141147
* the exception to log
142148
*/
143149
public void debug(Object message, Throwable t) {
144-
logger.log(null, FQCN, LocationAwareLogger.DEBUG_INT, String.valueOf(message), null, t);
150+
if (isDebugEnabled()) {
151+
logger.log(null, FQCN, LocationAwareLogger.DEBUG_INT, String.valueOf(message), null, t);
152+
}
145153
}
146154

147155
/**
@@ -152,7 +160,9 @@ public void debug(Object message, Throwable t) {
152160
* the message to log. Converted to {@link String}
153161
*/
154162
public void info(Object message) {
155-
logger.log(null, FQCN, LocationAwareLogger.INFO_INT, String.valueOf(message), null, null);
163+
if (isInfoEnabled()) {
164+
logger.log(null, FQCN, LocationAwareLogger.INFO_INT, String.valueOf(message), null, null);
165+
}
156166
}
157167

158168
/**
@@ -165,7 +175,9 @@ public void info(Object message) {
165175
* the exception to log
166176
*/
167177
public void info(Object message, Throwable t) {
168-
logger.log(null, FQCN, LocationAwareLogger.INFO_INT, String.valueOf(message), null, t);
178+
if (isInfoEnabled()) {
179+
logger.log(null, FQCN, LocationAwareLogger.INFO_INT, String.valueOf(message), null, t);
180+
}
169181
}
170182

171183
/**
@@ -176,7 +188,9 @@ public void info(Object message, Throwable t) {
176188
* the message to log. Converted to {@link String}
177189
*/
178190
public void warn(Object message) {
179-
logger.log(null, FQCN, LocationAwareLogger.WARN_INT, String.valueOf(message), null, null);
191+
if (isWarnEnabled()) {
192+
logger.log(null, FQCN, LocationAwareLogger.WARN_INT, String.valueOf(message), null, null);
193+
}
180194
}
181195

182196
/**
@@ -189,7 +203,9 @@ public void warn(Object message) {
189203
* the exception to log
190204
*/
191205
public void warn(Object message, Throwable t) {
192-
logger.log(null, FQCN, LocationAwareLogger.WARN_INT, String.valueOf(message), null, t);
206+
if (isWarnEnabled()) {
207+
logger.log(null, FQCN, LocationAwareLogger.WARN_INT, String.valueOf(message), null, t);
208+
}
193209
}
194210

195211
/**
@@ -200,7 +216,9 @@ public void warn(Object message, Throwable t) {
200216
* the message to log. Converted to {@link String}
201217
*/
202218
public void error(Object message) {
203-
logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, null);
219+
if (isErrorEnabled()) {
220+
logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, null);
221+
}
204222
}
205223

206224
/**
@@ -213,7 +231,9 @@ public void error(Object message) {
213231
* the exception to log
214232
*/
215233
public void error(Object message, Throwable t) {
216-
logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, t);
234+
if (isErrorEnabled()) {
235+
logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, t);
236+
}
217237
}
218238

219239
/**
@@ -224,7 +244,9 @@ public void error(Object message, Throwable t) {
224244
* the message to log. Converted to {@link String}
225245
*/
226246
public void fatal(Object message) {
227-
logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, null);
247+
if (isErrorEnabled()) {
248+
logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, null);
249+
}
228250
}
229251

230252
/**
@@ -237,7 +259,9 @@ public void fatal(Object message) {
237259
* the exception to log
238260
*/
239261
public void fatal(Object message, Throwable t) {
240-
logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, t);
262+
if (isErrorEnabled()) {
263+
logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, t);
264+
}
241265
}
242266

243267
/**

jcl-over-slf4j/src/test/java/org/apache/commons/logging/InvokeJCLTest.java

+53
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import static org.junit.Assert.assertFalse;
2929
import static org.junit.Assert.assertTrue;
30+
import static org.junit.Assert.assertEquals;
3031

3132
import org.junit.Test;
3233

@@ -85,4 +86,56 @@ public void testPrintAPI() {
8586
log.fatal(null, e);
8687
log.fatal("fatal message", e);
8788
}
89+
90+
@Test
91+
public void testAvoidConvertingObjectToString() {
92+
Log log = LogFactory.getLog(InvokeJCLTest.class);
93+
Exception e = new Exception("just testing");
94+
95+
TestMessage fatalMsg = new TestMessage("fatal msg");
96+
TestMessage errorMsg = new TestMessage("error msg");
97+
TestMessage warnMsg = new TestMessage("warn msg");
98+
TestMessage infoMsg = new TestMessage("info msg");
99+
TestMessage debugMsg = new TestMessage("debug msg");
100+
TestMessage traceMsg = new TestMessage("trace msg");
101+
102+
log.fatal(fatalMsg);
103+
log.fatal(fatalMsg, e);
104+
assertEquals(2, fatalMsg.invokedCount);
105+
106+
log.error(errorMsg);
107+
log.error(errorMsg, e);
108+
assertEquals(2, errorMsg.invokedCount);
109+
110+
log.warn(warnMsg);
111+
log.warn(warnMsg, e);
112+
assertEquals(2, warnMsg.invokedCount);
113+
114+
log.info(infoMsg);
115+
log.info(infoMsg, e);
116+
assertEquals(2, infoMsg.invokedCount);
117+
118+
log.debug(debugMsg);
119+
log.debug(debugMsg, e);
120+
assertEquals(0, debugMsg.invokedCount);
121+
122+
log.trace(traceMsg);
123+
log.trace(traceMsg, e);
124+
assertEquals(0, traceMsg.invokedCount);
125+
}
126+
127+
static class TestMessage {
128+
129+
private final String msg;
130+
int invokedCount = 0;
131+
132+
TestMessage(String msg) {this.msg = msg;}
133+
134+
@Override
135+
public String toString() {
136+
invokedCount++;
137+
return msg;
138+
}
139+
}
140+
88141
}

0 commit comments

Comments
 (0)