Merge pull request #12130 from hkhan/JAVA-11417-fix-log4j2-test-failure

[JAVA-11417] Fix log4j2 JSON integration test
This commit is contained in:
kwoyke 2022-04-28 21:22:49 +02:00 committed by GitHub
commit c3e0c5b1fb
1 changed files with 37 additions and 26 deletions

View File

@ -1,47 +1,58 @@
package com.baeldung.logging.log4j2.tests; package com.baeldung.logging.log4j2.tests;
import static org.junit.Assert.assertTrue; import com.baeldung.logging.log4j2.Log4j2BaseIntegrationTest;
import com.fasterxml.jackson.databind.JsonNode;
import java.io.ByteArrayOutputStream; import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.io.PrintStream;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.appender.WriterAppender;
import org.apache.logging.log4j.core.layout.JsonLayout;
import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import com.baeldung.logging.log4j2.Log4j2BaseIntegrationTest; import java.io.CharArrayWriter;
import com.fasterxml.jackson.databind.ObjectMapper; import java.io.Writer;
import static org.junit.Assert.assertTrue;
public class JSONLayoutIntegrationTest extends Log4j2BaseIntegrationTest { public class JSONLayoutIntegrationTest extends Log4j2BaseIntegrationTest {
private static Logger logger; private Appender appender;
private ByteArrayOutputStream consoleOutput = new ByteArrayOutputStream(); private Logger logger;
private PrintStream ps = new PrintStream(consoleOutput); private final Writer writer = new CharArrayWriter();
@Before @Before
public void setUp() { public void setUp() {
// Redirect console output to our stream
System.setOut(ps);
logger = LogManager.getLogger("CONSOLE_JSON_APPENDER"); logger = LogManager.getLogger("CONSOLE_JSON_APPENDER");
appender = WriterAppender.newBuilder()
.setTarget(writer)
.setLayout(JsonLayout.newBuilder().build())
.setName("json_layout_for_testing")
.build();
appender.start();
((org.apache.logging.log4j.core.Logger) logger).addAppender(appender);
} }
@Test @Test
public void whenLogLayoutInJSON_thenOutputIsCorrectJSON() { public void whenLogLayoutInJSON_thenOutputIsCorrectJSON() throws Exception {
logger.debug("Debug message"); logger.debug("Debug message");
String currentLog = consoleOutput.toString();
assertTrue(currentLog.isEmpty()); writer.flush();
assertTrue(isValidJSON(currentLog)); assertTrue(isValidJSON(writer.toString()));
} }
public static boolean isValidJSON(String jsonInString) { @After
try { public void cleanup() {
final ObjectMapper mapper = new ObjectMapper(); ((org.apache.logging.log4j.core.Logger) logger).removeAppender(appender);
mapper.readTree(jsonInString);
return true;
} catch (IOException e) {
return false;
} }
private static boolean isValidJSON(String jsonInString) throws Exception {
JsonNode jsonNode = new ObjectMapper().readTree(jsonInString);
return jsonNode.get("message").asText().equals("Debug message");
} }
} }