Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 6b4e5f8

Browse files
committedApr 9, 2024
fix issue: #409
Signed-off-by: MzrW <[email protected]>
1 parent 448bca1 commit 6b4e5f8

File tree

2 files changed

+129
-24
lines changed

2 files changed

+129
-24
lines changed
 

‎slf4j-api/src/main/java/org/slf4j/spi/DefaultLoggingEventBuilder.java

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
import org.slf4j.Logger;
3030
import org.slf4j.Marker;
31+
import org.slf4j.MarkerFactory;
3132
import org.slf4j.event.DefaultLoggingEvent;
3233
import org.slf4j.event.KeyValuePair;
3334
import org.slf4j.event.Level;
@@ -38,11 +39,11 @@
3839
*/
3940
public class DefaultLoggingEventBuilder implements LoggingEventBuilder, CallerBoundaryAware {
4041

41-
42+
4243
// The caller boundary when the log() methods are invoked, is this class itself.
43-
44+
4445
static String DLEB_FQCN = DefaultLoggingEventBuilder.class.getName();
45-
46+
4647
protected DefaultLoggingEvent loggingEvent;
4748
protected Logger logger;
4849

@@ -53,7 +54,7 @@ public DefaultLoggingEventBuilder(Logger logger, Level level) {
5354

5455
/**
5556
* Add a marker to the current logging event being built.
56-
*
57+
*
5758
* It is possible to add multiple markers to the same logging event.
5859
*
5960
* @param marker the marker to add
@@ -140,9 +141,10 @@ public void log(Supplier<String> messageSupplier) {
140141
log(messageSupplier.get());
141142
}
142143
}
143-
144+
144145
protected void log(LoggingEvent aLoggingEvent) {
145-
setCallerBoundary(DLEB_FQCN);
146+
if (loggingEvent.getCallerBoundary() == null)
147+
setCallerBoundary(DLEB_FQCN);
146148
if (logger instanceof LoggingEventAware) {
147149
((LoggingEventAware) logger).log(aLoggingEvent);
148150
} else {
@@ -170,29 +172,32 @@ private void logViaPublicSLF4JLoggerAPI(LoggingEvent aLoggingEvent) {
170172

171173
msg = mergeMarkersAndKeyValuePairs(aLoggingEvent, msg);
172174

173-
switch (aLoggingEvent.getLevel()) {
174-
case TRACE:
175-
logger.trace(msg, combinedArguments);
176-
break;
177-
case DEBUG:
178-
logger.debug(msg, combinedArguments);
179-
break;
180-
case INFO:
181-
logger.info(msg, combinedArguments);
182-
break;
183-
case WARN:
184-
logger.warn(msg, combinedArguments);
185-
break;
186-
case ERROR:
187-
logger.error(msg, combinedArguments);
188-
break;
175+
if(logger instanceof LocationAwareLogger) {
176+
((LocationAwareLogger) logger).log(null, aLoggingEvent.getCallerBoundary(), aLoggingEvent.getLevel().toInt(), msg, combinedArguments, aLoggingEvent.getThrowable());
177+
} else {
178+
switch (aLoggingEvent.getLevel()) {
179+
case TRACE:
180+
logger.trace(msg, combinedArguments);
181+
break;
182+
case DEBUG:
183+
logger.debug(msg, combinedArguments);
184+
break;
185+
case INFO:
186+
logger.info(msg, combinedArguments);
187+
break;
188+
case WARN:
189+
logger.warn(msg, combinedArguments);
190+
break;
191+
case ERROR:
192+
logger.error(msg, combinedArguments);
193+
break;
194+
}
189195
}
190-
191196
}
192197

193198
/**
194199
* Prepend markers and key-value pairs to the message.
195-
*
200+
*
196201
* @param aLoggingEvent
197202
* @param msg
198203
* @return
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package org.slf4j.jul;
2+
3+
import org.junit.After;
4+
import org.junit.Assert;
5+
import org.junit.Before;
6+
import org.junit.Test;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
import org.slf4j.event.EventConstants;
10+
import org.slf4j.spi.CallerBoundaryAware;
11+
import org.slf4j.spi.LocationAwareLogger;
12+
import org.slf4j.spi.LoggingEventBuilder;
13+
14+
import java.util.logging.Handler;
15+
import java.util.logging.Level;
16+
import java.util.logging.LogRecord;
17+
18+
import static org.junit.Assert.assertEquals;
19+
20+
public class LocationAwareLoggingTest {
21+
ListHandler listHandler = new ListHandler();
22+
java.util.logging.Logger root = java.util.logging.Logger.getLogger("");
23+
Level oldLevel;
24+
25+
LoggerWrapper logger = new LoggerWrapper(getClass());
26+
27+
@Before
28+
public void setUp() throws Exception {
29+
oldLevel = root.getLevel();
30+
root.setLevel(Level.FINE);
31+
// removeAllHandlers(root);
32+
root.addHandler(listHandler);
33+
}
34+
35+
@After
36+
public void tearDown() throws Exception {
37+
root.setLevel(oldLevel);
38+
removeListHandlers(root);
39+
}
40+
41+
void removeListHandlers(java.util.logging.Logger logger) {
42+
Handler[] handlers = logger.getHandlers();
43+
for(Handler h : handlers) {
44+
if(h instanceof ListHandler)
45+
logger.removeHandler(h);
46+
}
47+
}
48+
49+
@Test
50+
public void simpleMessage() {
51+
String msg = "Hello world.";
52+
logger.info(msg);
53+
assertLogMessage("Hello world.", 0);
54+
assertSourceClassName(LocationAwareLoggingTest.class.getName(), 0);
55+
}
56+
57+
@Test
58+
public void messageViaEvent() {
59+
String msg = "Hello world.";
60+
logger.infoWithEvent(msg);
61+
assertLogMessage("Hello world.", 0);
62+
assertSourceClassName(LocationAwareLoggingTest.class.getName(), 0);
63+
}
64+
65+
private void assertSourceClassName(String expected, int index) {
66+
LogRecord logRecord = listHandler.recordList.get(index);
67+
Assert.assertNotNull(logRecord);
68+
assertEquals(expected, logRecord.getSourceClassName());
69+
}
70+
71+
private void assertLogMessage(String expected, int index) {
72+
LogRecord logRecord = listHandler.recordList.get(index);
73+
Assert.assertNotNull(logRecord);
74+
assertEquals(expected, logRecord.getMessage());
75+
}
76+
}
77+
78+
class LoggerWrapper {
79+
static final String FQCN_WRAPPER = LoggerWrapper.class.getName();
80+
final Logger logger;
81+
82+
LoggerWrapper(Class<?> clazz) {
83+
logger = LoggerFactory.getLogger(clazz);
84+
}
85+
86+
public void info(String msg) {
87+
if(logger instanceof LocationAwareLogger)
88+
((LocationAwareLogger) logger).log(null, FQCN_WRAPPER, EventConstants.INFO_INT, msg, new Object[0], null);
89+
else
90+
logger.info(msg);
91+
}
92+
93+
public void infoWithEvent(String msg) {
94+
LoggingEventBuilder builder = logger.atInfo();
95+
if(builder instanceof CallerBoundaryAware)
96+
((CallerBoundaryAware) builder).setCallerBoundary(FQCN_WRAPPER);
97+
98+
builder.log(msg);
99+
}
100+
}

0 commit comments

Comments
 (0)
Please sign in to comment.