Skip to content

Commit 505d7fa

Browse files
authored
Merge pull request #6 from SebastianKuehn/slf4jv2
2 parents 9f1ba5a + 73b4097 commit 505d7fa

File tree

8 files changed

+130
-12
lines changed

8 files changed

+130
-12
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ bin/
66
.recommenders/
77
.classpath
88
.project
9+
.idea/

build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ subprojects {
1111
java.toolchain.languageVersion = JavaLanguageVersion.of(8)
1212

1313
ext {
14-
junitVersion = '5.8.2' // https://search.maven.org/artifact/org.junit.jupiter/junit-jupiter-api
15-
logbackVersion = '1.2.10' // https://search.maven.org/artifact/ch.qos.logback/logback-core
16-
log4j2Version = '2.17.1' // https://search.maven.org/artifact/org.apache.logging.log4j/log4j-core
17-
slf4jVersion = '1.7.32' // https://search.maven.org/artifact/org.slf4j/slf4j-api
14+
junitVersion = '5.9.3' // https://search.maven.org/artifact/org.junit.jupiter/junit-jupiter-api
15+
logbackVersion = '1.3.7' // https://search.maven.org/artifact/ch.qos.logback/logback-core
16+
log4j2Version = '2.20.0' // https://search.maven.org/artifact/org.apache.logging.log4j/log4j-core
17+
slf4jVersion = '2.0.7' // https://search.maven.org/artifact/org.slf4j/slf4j-api
1818
}
1919

2020
repositories {

logunit-jul/src/main/java/io/github/netmikey/logunit/jul/JulLogProvider.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package io.github.netmikey.logunit.jul;
22

3-
import java.util.HashMap;
4-
import java.util.List;
5-
import java.util.Map;
3+
import java.util.*;
64
import java.util.logging.Level;
75
import java.util.logging.LogRecord;
86
import java.util.logging.Logger;
@@ -11,6 +9,7 @@
119

1210
import org.junit.jupiter.api.extension.ExtensionContext;
1311
import org.slf4j.Marker;
12+
import org.slf4j.event.KeyValuePair;
1413
import org.slf4j.event.LoggingEvent;
1514

1615
import io.github.netmikey.logunit.api.LogCapturer;
@@ -114,10 +113,29 @@ public String getMessage() {
114113
}
115114

116115
@Override
116+
public List<Object> getArguments() {
117+
Object[] parameters = record.getParameters();
118+
if (null == parameters) {
119+
return Collections.emptyList();
120+
}
121+
return Arrays.asList(parameters);
122+
}
123+
124+
@Override
125+
public List<KeyValuePair> getKeyValuePairs() {
126+
return Collections.emptyList();
127+
}
128+
129+
// for compatibility with older apis
117130
public Marker getMarker() {
118131
return null;
119132
}
120133

134+
@Override
135+
public List<Marker> getMarkers() {
136+
return Collections.emptyList();
137+
}
138+
121139
@Override
122140
public String getLoggerName() {
123141
return record.getLoggerName();

logunit-jul/src/test/java/io/github/netmikey/logunit/jul/LogCapturerWithJulTest.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package io.github.netmikey.logunit.jul;
22

3+
import java.util.Arrays;
4+
import java.util.Collections;
5+
import java.util.List;
36
import java.util.logging.Logger;
47

58
import org.junit.jupiter.api.Assertions;
@@ -10,6 +13,7 @@
1013
import org.slf4j.event.Level;
1114

1215
import io.github.netmikey.logunit.api.LogCapturer;
16+
import org.slf4j.event.LoggingEvent;
1317

1418
/**
1519
* Unit test that uses JUL, applies {@link LogCapturer}s and validates their
@@ -79,6 +83,37 @@ public void test2CapturerReset() {
7983
Assertions.assertEquals(0, namedLoggerWarnCapturer.size());
8084
}
8185

86+
@Test
87+
void test3EventMethodsWithoutParameters() {
88+
namedLogger.warning(() -> "Test-Message");
89+
90+
List<LoggingEvent> events = namedLoggerWarnCapturer.getEvents();
91+
Assertions.assertEquals(events.size(), 1);
92+
93+
LoggingEvent event = events.get(0);
94+
Assertions.assertEquals("Test-Message", event.getMessage());
95+
Assertions.assertEquals(Level.WARN, event.getLevel());
96+
Assertions.assertSame(Collections.emptyList(), event.getArguments());
97+
Assertions.assertSame(Collections.emptyList(), event.getKeyValuePairs());
98+
Assertions.assertSame(Collections.emptyList(), event.getMarkers());
99+
}
100+
101+
@Test
102+
void test4EventMethodsWithParameters() {
103+
namedLogger.log(java.util.logging.Level.SEVERE, "{0}-Message {1}", new Object[]{"Test", 42});
104+
105+
List<LoggingEvent> events = namedLoggerWarnCapturer.getEvents();
106+
Assertions.assertEquals(events.size(), 1);
107+
108+
LoggingEvent event = events.get(0);
109+
Assertions.assertEquals("{0}-Message {1}", event.getMessage(),
110+
"returns the raw message (*not* formatted)");
111+
Assertions.assertEquals(Level.ERROR, event.getLevel());
112+
Assertions.assertEquals(Arrays.asList("Test", 42), event.getArguments());
113+
Assertions.assertSame(Collections.emptyList(), event.getKeyValuePairs());
114+
Assertions.assertSame(Collections.emptyList(), event.getMarkers());
115+
}
116+
82117
private void logEverythingOnce(Logger logger) {
83118
logger.finest("Some finest message");
84119
logger.finer("Some finer message");

logunit-log4j2/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ dependencies {
1010
implementation("org.apache.logging.log4j:log4j-core:${log4j2Version}")
1111

1212
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
13-
testRuntimeOnly("org.apache.logging.log4j:log4j-slf4j-impl:${log4j2Version}")
13+
testRuntimeOnly("org.apache.logging.log4j:log4j-slf4j2-impl:${log4j2Version}")
1414
}

logunit-log4j2/src/main/java/io/github/netmikey/logunit/log4j2/Log4j2LogProvider.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,13 @@ private void createLoggerAndAddAppender(String loggerName, Level level) {
8181
Configuration cfg = ctx.getConfiguration();
8282
AppenderRef ref = AppenderRef.createAppenderRef(listAppender.getName(), null, null);
8383
AppenderRef[] refs = new AppenderRef[] { ref };
84-
LoggerConfig loggerConfig = LoggerConfig.createLogger(true, level, loggerName, "true", refs, null, cfg, null);
84+
LoggerConfig loggerConfig = LoggerConfig.newBuilder()
85+
.withAdditivity(true)
86+
.withLevel(level)
87+
.withLoggerName(loggerName)
88+
.withIncludeLocation("true")
89+
.withRefs(refs).withConfig(cfg)
90+
.build();
8591
loggerConfig.addAppender(listAppender, level, null);
8692
cfg.addLogger(loggerConfig.getName(), loggerConfig);
8793
}

logunit-logback/src/main/java/io/github/netmikey/logunit/logback/LogbackLogProvider.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.netmikey.logunit.logback;
22

3+
import java.util.Arrays;
34
import java.util.HashMap;
45
import java.util.List;
56
import java.util.Map;
@@ -9,6 +10,7 @@
910
import org.junit.jupiter.api.extension.ExtensionContext;
1011
import org.slf4j.LoggerFactory;
1112
import org.slf4j.Marker;
13+
import org.slf4j.event.KeyValuePair;
1214
import org.slf4j.event.LoggingEvent;
1315

1416
import ch.qos.logback.classic.Level;
@@ -24,7 +26,7 @@
2426
*/
2527
public class LogbackLogProvider extends BaseLogProvider {
2628

27-
private final ConcurrentListAppender<ILoggingEvent> listAppender = new ConcurrentListAppender<ILoggingEvent>();
29+
private final ConcurrentListAppender<ILoggingEvent> listAppender = new ConcurrentListAppender<>();
2830

2931
private final Map<String, Level> originalLevels = new HashMap<>();
3032

@@ -127,8 +129,25 @@ public String getMessage() {
127129
}
128130

129131
@Override
132+
public List<Object> getArguments() {
133+
return Arrays.asList(iEvent.getArgumentArray());
134+
}
135+
136+
@Override
137+
public List<KeyValuePair> getKeyValuePairs() {
138+
return iEvent.getKeyValuePairs();
139+
}
140+
141+
// for compatibility with older apis
130142
public Marker getMarker() {
131-
return iEvent.getMarker();
143+
@SuppressWarnings("deprecation")
144+
Marker marker = iEvent.getMarker();
145+
return marker;
146+
}
147+
148+
@Override
149+
public List<Marker> getMarkers() {
150+
return iEvent.getMarkerList();
132151
}
133152

134153
@Override

logunit-logback/src/test/java/io/github/netmikey/logunit/logback/LogCapturerWithLogbackTest.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,16 @@
77
import org.junit.jupiter.api.extension.RegisterExtension;
88
import org.slf4j.Logger;
99
import org.slf4j.LoggerFactory;
10+
import org.slf4j.Marker;
11+
import org.slf4j.MarkerFactory;
12+
import org.slf4j.event.KeyValuePair;
1013
import org.slf4j.event.Level;
1114

1215
import io.github.netmikey.logunit.api.LogCapturer;
16+
import org.slf4j.event.LoggingEvent;
17+
18+
import java.util.Arrays;
19+
import java.util.List;
1320

1421
/**
1522
* Unit test that uses Logback, applies {@link LogCapturer}s and validates their
@@ -37,7 +44,7 @@ public class LogCapturerWithLogbackTest {
3744
* above when no level is specified</li>
3845
* <li>that the namedLogger (by logger name) captures only the WARN level
3946
* and above as specified</li>
40-
* <li>both loggers and their capturers don't affeact each other</li>
47+
* <li>both loggers and their capturers don't affect each other</li>
4148
* </ul>
4249
*/
4350
@Test
@@ -84,6 +91,38 @@ public void test3CustomPredicates() {
8491
"contain 'Some * message'");
8592
}
8693

94+
/**
95+
* Test that the values of the new fluent interface can be accessed
96+
*/
97+
@Test
98+
void test4FluentApi() {
99+
Marker marker1 = MarkerFactory.getMarker("Marker 1");
100+
Marker marker2 = MarkerFactory.getMarker("Marker 2");
101+
testLogger
102+
.atError()
103+
.setMessage(() -> "{}-Message {}")
104+
.addArgument("Test")
105+
.addArgument(42)
106+
.addKeyValue("key1", "value1")
107+
.addKeyValue("key2", "value2")
108+
.addMarker(marker1)
109+
.addMarker(marker2)
110+
.log();
111+
112+
List<LoggingEvent> events = testLoggerInfoCapturer.getEvents();
113+
Assertions.assertEquals(events.size(), 1);
114+
115+
LoggingEvent event = events.get(0);
116+
Assertions.assertEquals("Test-Message 42", event.getMessage());
117+
Assertions.assertEquals(Arrays.asList("Test", 42), event.getArguments());
118+
Assertions.assertEquals(Arrays.asList(marker1, marker2), event.getMarkers());
119+
120+
List<KeyValuePair> pairs = event.getKeyValuePairs();
121+
Assertions.assertEquals(2, pairs.size());
122+
Assertions.assertEquals("key1=\"value1\"", pairs.get(0).toString());
123+
Assertions.assertEquals("key2=\"value2\"", pairs.get(1).toString());
124+
}
125+
87126
private void logEverythingOnce(Logger logger) {
88127
logger.trace("Some trace message");
89128
logger.debug("Some debug message");

0 commit comments

Comments
 (0)