Skip to content

Commit 4b5bb41

Browse files
committed
fix SLF4J-546, Fluent logging API doesn't populate timestamp with Reload4JLogger
Signed-off-by: Ceki Gulcu <ceki@qos.ch>
1 parent b500a6f commit 4b5bb41

File tree

4 files changed

+75
-0
lines changed

4 files changed

+75
-0
lines changed

slf4j-api/src/main/java/org/slf4j/event/DefaultLoggingEvent.java

+4
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@ public long getTimeStamp() {
126126
return timeStamp;
127127
}
128128

129+
public void setTimeStamp(long timeStamp) {
130+
this.timeStamp = timeStamp;
131+
}
132+
129133
public void setCallerBoundary(String fqcn) {
130134
this.callerBoundary = fqcn;
131135
}

slf4j-reload4j/src/main/java/org/slf4j/reload4j/Reload4jLoggerAdapter.java

+6
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.apache.log4j.spi.ThrowableInformation;
3434
import org.slf4j.Logger;
3535
import org.slf4j.Marker;
36+
import org.slf4j.event.DefaultLoggingEvent;
3637
import org.slf4j.event.LoggingEvent;
3738
import org.slf4j.event.SubstituteLoggingEvent;
3839
import org.slf4j.helpers.LegacyAbstractLogger;
@@ -169,6 +170,11 @@ private org.apache.log4j.spi.LoggingEvent event2Log4jEvent(LoggingEvent event, L
169170
if (t != null)
170171
ti = new ThrowableInformation(t);
171172

173+
if(event instanceof DefaultLoggingEvent) {
174+
DefaultLoggingEvent defaultLoggingEvent = (DefaultLoggingEvent) event;
175+
defaultLoggingEvent.setTimeStamp(System.currentTimeMillis());
176+
}
177+
172178
org.apache.log4j.spi.LoggingEvent log4jEvent = new org.apache.log4j.spi.LoggingEvent(fqcn, logger, event.getTimeStamp(), log4jLevel, formattedMessage,
173179
event.getThreadName(), ti, null, locationInfo, null);
174180

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package org.slf4j.reload4j;
2+
3+
import org.apache.log4j.spi.LoggingEvent;
4+
import org.junit.After;
5+
import org.junit.Test;
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
8+
9+
import java.util.List;
10+
11+
import static org.junit.Assert.*;
12+
13+
public class EventFieldsTest {
14+
15+
// value of LogManager.DEFAULT_CONFIGURATION_KEY;
16+
static String CONFIG_FILE_KEY = "log4j.configuration";
17+
18+
@After
19+
public void tearDown() throws Exception {
20+
System.clearProperty(CONFIG_FILE_KEY);
21+
}
22+
23+
@Test
24+
public void testWhetherEventsFieldsAreSet() {
25+
System.setProperty(CONFIG_FILE_KEY, "eventFields.properties");
26+
Logger logger = LoggerFactory.getLogger(this.getClass());
27+
logger.info("hello");
28+
logger.atInfo().setMessage("hello").log();
29+
30+
org.slf4j.reload4j.Reload4jLoggerAdapter rootReload4j = (org.slf4j.reload4j.Reload4jLoggerAdapter) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
31+
32+
33+
ListAppender listAppender = (ListAppender) rootReload4j.logger.getAppender("LIST");
34+
35+
assertNotNull(listAppender);
36+
assertNotNull(listAppender.list);
37+
38+
List<LoggingEvent> eventList = listAppender.list;
39+
40+
assertEquals(2, eventList.size());
41+
42+
LoggingEvent loggingEvent0 = eventList.get(0);
43+
long timeStamp0 = loggingEvent0.getTimeStamp();
44+
String threadName0 = loggingEvent0.getThreadName();
45+
assertTrue(timeStamp0 != 0);
46+
assertNotNull(threadName0);
47+
assertFalse(threadName0.isEmpty());
48+
49+
LoggingEvent loggingEvent1 = eventList.get(1);
50+
long timeStamp1 = loggingEvent1.getTimeStamp();
51+
String threadName1 = loggingEvent1.getThreadName();
52+
assertTrue(timeStamp1 != 0);
53+
assertTrue(timeStamp1 >= timeStamp0);
54+
assertNotNull(threadName1);
55+
assertFalse(threadName1.isEmpty());
56+
assertEquals(threadName0, threadName1);
57+
58+
}
59+
60+
61+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
log4j.debug=true
2+
log4j.rootLogger=DEBUG, LIST
3+
4+
log4j.appender.LIST=org.slf4j.reload4j.ListAppender

0 commit comments

Comments
 (0)