Skip to content

Commit ddd916e

Browse files
committed
Use nanosecond precision for LogEvent comparison
Compare LogEvent instances using getInstant().getNanoOfMillisecond() instead of getTimeMillis() by adding a helper method. Add a unit test (testAppendTransferAndStopClearsEvents) to verify InMemoryAppender.transfer() behavior, that events are not duplicated and stop() clears buffered events. Also import SimpleMessage and update test event creation to use the imported type.
1 parent a22397e commit ddd916e

2 files changed

Lines changed: 35 additions & 2 deletions

File tree

microsphere-log4j2/src/main/java/io/microsphere/logging/log4j2/LogEventComparator.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ private LogEventComparator() {
3939

4040
@Override
4141
public int compare(LogEvent o1, LogEvent o2) {
42-
return Long.compare(o1.getTimeMillis(), o2.getTimeMillis());
42+
return Long.compare(getNanoOfMillisecond(o1), getNanoOfMillisecond(o2));
43+
}
44+
45+
private int getNanoOfMillisecond(LogEvent logEvent) {
46+
return logEvent.getInstant().getNanoOfMillisecond();
4347
}
4448
}

microsphere-log4j2/src/test/java/io/microsphere/logging/log4j2/appender/InMemoryAppenderTest.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.apache.logging.log4j.core.LogEvent;
2222
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
2323
import org.apache.logging.log4j.core.layout.PatternLayout;
24+
import org.apache.logging.log4j.message.SimpleMessage;
2425
import org.junit.jupiter.api.Test;
2526

2627
import java.util.ArrayList;
@@ -61,6 +62,34 @@ void testBasicMethodsAndLifecycle() {
6162
appender.stop(); // also covers clear() on empty set
6263
}
6364

65+
@Test
66+
void testAppendTransferAndStopClearsEvents() {
67+
InMemoryAppender source = new InMemoryAppender();
68+
CollectingAppender target = new CollectingAppender();
69+
70+
LogEvent event1 = newEvent("message-1");
71+
LogEvent event2 = newEvent("message-2");
72+
73+
source.append(event1);
74+
source.append(event2);
75+
76+
source.transfer(target);
77+
78+
assertEquals(2, target.events.size());
79+
assertTrue(target.events.contains(event1));
80+
assertTrue(target.events.contains(event2));
81+
82+
// Verify source is emptied after transfer
83+
source.transfer(target);
84+
assertEquals(2, target.events.size(), "second transfer should not add duplicates");
85+
86+
// Re-add and ensure stop clears buffered events
87+
source.append(newEvent("message-3"));
88+
source.stop();
89+
source.transfer(target);
90+
assertEquals(2, target.events.size(), "stop() should clear pending events");
91+
}
92+
6493
@Test
6594
void testFindInMemoryAppenderWithoutConfiguration() {
6695
// In plain unit test context, this may be null unless explicitly configured.
@@ -75,7 +104,7 @@ private static LogEvent newEvent(String message) {
75104
.setLoggerName("test.logger")
76105
.setLoggerFqcn(InMemoryAppenderTest.class.getName())
77106
.setLevel(INFO)
78-
.setMessage(new org.apache.logging.log4j.message.SimpleMessage(message))
107+
.setMessage(new SimpleMessage(message))
79108
.build();
80109
}
81110

0 commit comments

Comments
 (0)