Skip to content

Commit 9f841f2

Browse files
authored
Log4j2 and removing outputcaptor (#56)
1 parent c3aaf4b commit 9f841f2

8 files changed

Lines changed: 47 additions & 112 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,7 @@ Version | Notes
514514
0.7.0 | Added support for running queries in parallel
515515
0.7.1 | Fixed a bug with parallel query execution in REST and Hive engines. Upgraded to Apache HttpClient 5.x which supports HTTP2 in REST engine.
516516
0.7.2 | Added query priority to allow executing parallel queries in groups
517+
0.7.2 | Log4j2
517518

518519
## Members
519520

pom.xml

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@
4646

4747
<properties>
4848
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
49+
<slf4j.version>1.7.32</slf4j.version>
50+
<log4j.version>2.17.1</log4j.version>
4951
</properties>
5052

5153
<build>
@@ -139,7 +141,7 @@
139141
<plugin>
140142
<groupId>org.apache.maven.plugins</groupId>
141143
<artifactId>maven-shade-plugin</artifactId>
142-
<version>2.4.1</version>
144+
<version>3.2.1</version>
143145
<executions>
144146
<execution>
145147
<phase>package</phase>
@@ -166,6 +168,11 @@
166168
<pattern>org.objectweb.asm</pattern>
167169
<shadedPattern>org.shaded.objectweb.asm</shadedPattern>
168170
</relocation>
171+
<!-- Log4j-->
172+
<relocation>
173+
<pattern>org.apache.logging.log4j</pattern>
174+
<shadedPattern>org.shaded.apache.logging.log4j</shadedPattern>
175+
</relocation>
169176
</relocations>
170177
</configuration>
171178
</execution>
@@ -364,14 +371,14 @@
364371
<version>4.6</version>
365372
</dependency>
366373
<dependency>
367-
<groupId>log4j</groupId>
368-
<artifactId>log4j</artifactId>
369-
<version>1.2.17</version>
374+
<groupId>org.slf4j</groupId>
375+
<artifactId>slf4j-api</artifactId>
376+
<version>${slf4j.version}</version>
370377
</dependency>
371378
<dependency>
372-
<groupId>org.slf4j</groupId>
373-
<artifactId>slf4j-log4j12</artifactId>
374-
<version>1.7.10</version>
379+
<groupId>org.apache.logging.log4j</groupId>
380+
<artifactId>log4j-slf4j-impl</artifactId>
381+
<version>${log4j.version}</version>
375382
</dependency>
376383
<dependency>
377384
<groupId>org.projectlombok</groupId>
@@ -467,12 +474,24 @@
467474
<groupId>org.apache.hadoop</groupId>
468475
<artifactId>hadoop-common</artifactId>
469476
<version>2.6.0</version>
477+
<exclusions>
478+
<exclusion>
479+
<groupId>org.slf4j</groupId>
480+
<artifactId>slf4j-log4j12</artifactId>
481+
</exclusion>
482+
</exclusions>
470483
<scope>provided</scope>
471484
</dependency>
472485
<dependency>
473486
<groupId>org.apache.hadoop</groupId>
474487
<artifactId>hadoop-client</artifactId>
475488
<version>2.6.0</version>
489+
<exclusions>
490+
<exclusion>
491+
<groupId>org.slf4j</groupId>
492+
<artifactId>slf4j-log4j12</artifactId>
493+
</exclusion>
494+
</exclusions>
476495
<scope>provided</scope>
477496
</dependency>
478497
<dependency>

src/main/resources/log4j.properties

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
status=warn
2+
3+
appender.console.type=Console
4+
appender.console.name=STDOUT
5+
appender.console.layout.type=PatternLayout
6+
appender.console.layout.pattern=[%-5p] %d{ISO8601} %c - %m%n
7+
8+
rootLogger.level=info
9+
rootLogger.appenderRef.stdout.ref=STDOUT

src/test/java/com/yahoo/validatar/OutputCaptor.java

Lines changed: 0 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -5,93 +5,16 @@
55
package com.yahoo.validatar;
66

77
import org.apache.commons.io.output.NullOutputStream;
8-
import org.apache.log4j.Appender;
9-
import org.apache.log4j.Level;
10-
import org.apache.log4j.Logger;
11-
import org.apache.log4j.spi.LoggingEvent;
12-
import org.mockito.ArgumentCaptor;
138

149
import java.io.FileDescriptor;
1510
import java.io.FileOutputStream;
1611
import java.io.PrintStream;
17-
import java.util.List;
1812

19-
import static org.mockito.Mockito.atLeastOnce;
20-
import static org.mockito.Mockito.mock;
21-
import static org.mockito.Mockito.never;
22-
import static org.mockito.Mockito.verify;
23-
24-
/**
25-
* Extend this class to capture logging output without printing to stdout
26-
* Call setupMockedAppender and teardownMockedAppender to start and stop
27-
* the capturing and use isStringInLog to check if desired output in log
28-
* was seen.
29-
*/
3013
public class OutputCaptor {
31-
protected Appender mockedAppender;
32-
protected Level originalLevel;
33-
protected Appender originalAppender;
34-
3514
public static final PrintStream NULL = new PrintStream(NullOutputStream.NULL_OUTPUT_STREAM);
3615
public static final PrintStream OUT = new PrintStream(new FileOutputStream(FileDescriptor.out));
3716
public static final PrintStream ERR = new PrintStream(new FileOutputStream(FileDescriptor.err));
3817

39-
private boolean contains(String source, String target, boolean isCaseSensitive) {
40-
String superString = source;
41-
String subString = target;
42-
if (!isCaseSensitive) {
43-
superString = superString.toLowerCase();
44-
subString = subString.toLowerCase();
45-
}
46-
return superString.contains(subString);
47-
}
48-
49-
protected boolean isStringInLog(String message) {
50-
return isStringInLog(message, false);
51-
}
52-
53-
protected boolean isStringInLog(String message, boolean isCaseSensitive) {
54-
ArgumentCaptor<LoggingEvent> arguments = ArgumentCaptor.forClass(LoggingEvent.class);
55-
verify(mockedAppender, atLeastOnce()).doAppend(arguments.capture());
56-
List<LoggingEvent> events = arguments.getAllValues();
57-
for (LoggingEvent event : events) {
58-
String log = event.getRenderedMessage();
59-
if (contains(log, message, isCaseSensitive)) {
60-
return true;
61-
}
62-
}
63-
return false;
64-
}
65-
66-
protected boolean noStringInLog() {
67-
ArgumentCaptor<LoggingEvent> arguments = ArgumentCaptor.forClass(LoggingEvent.class);
68-
try {
69-
verify(mockedAppender, never()).doAppend(arguments.capture());
70-
} catch (Exception e) {
71-
return false;
72-
}
73-
return true;
74-
}
75-
76-
protected void setupMockedAppender() {
77-
setupMockedAppender(Level.ERROR);
78-
}
79-
80-
protected void setupMockedAppender(Level level) {
81-
originalLevel = Logger.getRootLogger().getLevel();
82-
originalAppender = Logger.getRootLogger().getAppender("stdout");
83-
Logger.getRootLogger().removeAllAppenders();
84-
mockedAppender = mock(Appender.class);
85-
Logger.getRootLogger().setLevel(level);
86-
Logger.getRootLogger().addAppender(mockedAppender);
87-
}
88-
89-
protected void teardownMockedAppender() {
90-
Logger.getRootLogger().removeAllAppenders();
91-
Logger.getRootLogger().setLevel(originalLevel);
92-
Logger.getRootLogger().addAppender(originalAppender);
93-
}
94-
9518
public static void redirectToDevNull() {
9619
System.setOut(NULL);
9720
System.setErr(NULL);
@@ -108,4 +31,3 @@ public static void runWithoutOutput(Runnable function) {
10831
redirectToStandard();
10932
}
11033
}
111-

src/test/java/com/yahoo/validatar/execution/EngineManagerTest.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@
44
*/
55
package com.yahoo.validatar.execution;
66

7-
import com.yahoo.validatar.OutputCaptor;
87
import com.yahoo.validatar.common.Column;
98
import com.yahoo.validatar.common.Query;
109
import com.yahoo.validatar.common.Result;
1110
import com.yahoo.validatar.common.TypeSystem;
1211
import com.yahoo.validatar.common.TypedObject;
1312
import org.testng.Assert;
14-
import org.testng.annotations.AfterMethod;
1513
import org.testng.annotations.BeforeMethod;
1614
import org.testng.annotations.Test;
1715

@@ -22,8 +20,9 @@
2220
import java.util.List;
2321
import java.util.Map;
2422

23+
import static com.yahoo.validatar.OutputCaptor.runWithoutOutput;
2524

26-
public class EngineManagerTest extends OutputCaptor {
25+
public class EngineManagerTest {
2726

2827
private class MockFailingEngine implements Engine {
2928
public static final String ENGINE_NAME = "FAILER";
@@ -155,7 +154,6 @@ public String getName() {
155154

156155
@BeforeMethod
157156
public void setup() {
158-
setupMockedAppender();
159157
query = new Query();
160158
query.engine = MockPassingEngine.ENGINE_NAME;
161159
queries = new ArrayList<>();
@@ -168,33 +166,25 @@ public void setup() {
168166
manager = new EngineManager(args);
169167
}
170168

171-
@AfterMethod
172-
public void teardown() {
173-
teardownMockedAppender();
174-
}
175-
176169
@Test
177170
public void testEngineFailToStart() {
178171
query.engine = MockFailingEngine.ENGINE_NAME;
179172
manager.setEngines(engines);
180173
Assert.assertFalse(manager.startEngines(queries));
181-
Assert.assertTrue(isStringInLog("Required engine " + MockFailingEngine.ENGINE_NAME + " could not be setup"));
182174
}
183175

184176
@Test
185177
public void testEngineNotPresent() {
186178
query.engine = "FAKE_ENGINE";
187179
manager.setEngines(engines);
188180
Assert.assertFalse(manager.startEngines(queries));
189-
Assert.assertTrue(isStringInLog("Engine FAKE_ENGINE not loaded but required by query"));
190181
}
191182

192183
@Test
193184
public void testEngineNullQueriesNotNull() {
194185
query.engine = null;
195186
manager.setEngines(engines);
196187
Assert.assertFalse(manager.startEngines(queries));
197-
Assert.assertTrue(isStringInLog("Engine null not loaded but required by query"));
198188
}
199189

200190
@Test(expectedExceptions = {NullPointerException.class})

src/test/resources/log4j.properties

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
status=warn
2+
3+
appender.console.type=Console
4+
appender.console.name=STDOUT
5+
appender.console.layout.type=PatternLayout
6+
appender.console.layout.pattern=[%-5p] %d{ISO8601} %c - %m%n
7+
8+
rootLogger.level=fatal
9+
rootLogger.appenderRef.stdout.ref=STDOUT

0 commit comments

Comments
 (0)