package biz.paluch.logging.gelf.log4j; import static org.assertj.core.api.Assertions.assertThat; import java.util.Map; import org.apache.log4j.Logger; import org.apache.log4j.MDC; import org.apache.log4j.NDC; import org.apache.log4j.xml.DOMConfigurator; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import biz.paluch.logging.gelf.JsonUtil; import biz.paluch.logging.gelf.LogMessageField; /** * @author <a href="mailto:kai.geisselhardt@kaufland.com">Kai Geisselhardt</a> */ public class GelfLayoutUnitTests { private Logger logger; @BeforeAll public static void beforeClass() { DOMConfigurator.configure(GelfLayoutUnitTests.class.getResource("/log4j/log4j-gelf-layout.xml")); } @BeforeEach public void before() { TestAppender.clearLoggedLines(); logger = Logger.getLogger(GelfLayoutUnitTests.class); } @Test public void test() { logger.info("test1"); logger.info("test2"); logger.info("test3"); String[] loggedLines = TestAppender.getLoggedLines(); assertThat(loggedLines.length).isEqualTo(3); assertThat(parseToJSONObject(loggedLines[0]).get("full_message")).isEqualTo("test1"); assertThat(parseToJSONObject(loggedLines[1]).get("full_message")).isEqualTo("test2"); assertThat(parseToJSONObject(loggedLines[2]).get("full_message")).isEqualTo("test3"); } @Test public void testDefaults() throws Exception { NDC.push("ndc message"); logger.info("test1"); logger.info("test2"); logger.info("test3"); NDC.clear(); Map<String, Object> message = getMessage(); assertThat(message.get("version")).isNull(); assertThat(message).containsEntry("full_message", "test1"); assertThat(message).containsEntry("short_message", "test1"); assertThat(message).containsEntry("NDC", "ndc message"); assertThat(message).containsEntry("facility", "logstash-gelf"); assertThat(message).containsEntry("level", "6"); assertThat(message).containsEntry(LogMessageField.NamedLogField.SourceMethodName.name(), "testDefaults"); assertThat(message).containsEntry(LogMessageField.NamedLogField.SourceClassName.name(), getClass().getName()); assertThat(message).containsKeys("Thread", "timestamp", "MyTime"); } @Test public void testConfiguration() throws Exception { logger = Logger.getLogger("biz.paluch.logging.gelf.log4j.configured"); MDC.put("mdcField1", "mdcValue1"); NDC.push("ndc message"); logger.info("test1"); logger.info("test2"); logger.info("test3"); NDC.clear(); Map<String, Object> message = getMessage(); assertThat(message.get("version")).isNull(); assertThat(message).containsEntry("full_message", "test1"); assertThat(message).containsEntry("short_message", "test1"); assertThat(message).containsEntry("NDC", "ndc message"); assertThat(message).containsEntry("facility", "test"); assertThat(message).containsEntry("level", "6"); assertThat(message).containsEntry("fieldName1", "fieldValue1"); assertThat(message).containsEntry("LoggerName", "biz.paluch.logging.gelf.log4j.configured"); if (Log4jUtil.isLog4jMDCAvailable()) { assertThat(message).containsEntry("mdcField1", "mdcValue1"); } assertThat(message).containsKeys("timestamp", "MyTime"); } public Map<String, Object> getMessage() { String s = TestAppender.getLoggedLines()[0]; try { return (Map) JsonUtil.parseToMap(s); } catch (RuntimeException e) { System.out.println("Trying to parse: " + s); throw e; } } private Map<String, Object> parseToJSONObject(String value) { return JsonUtil.parseToMap(value); } }