package biz.paluch.logging.gelf.logback; import static org.assertj.core.api.Assertions.assertThat; import java.net.URL; import java.util.Map; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.slf4j.MDC; import biz.paluch.logging.gelf.GelfTestSender; import biz.paluch.logging.gelf.JsonUtil; import biz.paluch.logging.gelf.intern.GelfMessage; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.joran.JoranConfigurator; /** * @author <a href="mailto:tobiassebastian.kaefer@1und1.de">Tobias Kaefer</a> * @since 2013-10-07 */ public class GelfLogbackAppenderDynamicMdcTests { public static final String LOG_MESSAGE = "foo bar test log message"; public static final String MDC_MY_MDC = "myMdc"; public static final String MY_MDC_WITH_SUFFIX1 = "myMdc-with-suffix1"; public static final String MY_MDC_WITH_SUFFIX2 = "myMdc-with-suffix2"; public static final String VALUE_1 = "value1"; public static final String VALUE_2 = "value2"; public static final String VALUE_3 = "value3"; public static final String SOME_FIELD = "someField"; public static final String SOME_OTHER_FIELD = "someOtherField"; LoggerContext lc = null; @BeforeEach public void before() throws Exception { lc = new LoggerContext(); JoranConfigurator configurator = new JoranConfigurator(); configurator.setContext(lc); URL xmlConfigFile = getClass().getResource("/logback/logback-gelf-with-dynamic-fields.xml"); configurator.doConfigure(xmlConfigFile); GelfTestSender.getMessages().clear(); MDC.clear(); } @Test public void testWithoutFields() throws Exception { Logger logger = lc.getLogger(getClass()); logger.info(LOG_MESSAGE); assertThat(GelfTestSender.getMessages()).hasSize(1); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); String myMdc = gelfMessage.getField(MDC_MY_MDC); assertThat(myMdc).isNull(); } @Test public void testWithMdcPrefix() throws Exception { Logger logger = lc.getLogger(getClass()); MDC.put(MDC_MY_MDC, VALUE_1); MDC.put(MY_MDC_WITH_SUFFIX1, VALUE_2); MDC.put(MY_MDC_WITH_SUFFIX2, VALUE_3); logger.info(LOG_MESSAGE); assertThat(GelfTestSender.getMessages()).hasSize(1); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); assertThat(gelfMessage.getField(MDC_MY_MDC)).isEqualTo(VALUE_1); assertThat(gelfMessage.getField(MY_MDC_WITH_SUFFIX1)).isEqualTo(VALUE_2); assertThat(gelfMessage.getField(MY_MDC_WITH_SUFFIX2)).isEqualTo(VALUE_3); } @Test public void testWithMdcRegex() throws Exception { Logger logger = lc.getLogger(getClass()); MDC.put(SOME_FIELD, "included"); MDC.put(SOME_OTHER_FIELD, "excluded"); logger.info(LOG_MESSAGE); assertThat(GelfTestSender.getMessages()).hasSize(1); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); assertThat(gelfMessage.getField(SOME_FIELD)).isEqualTo("included"); assertThat(gelfMessage.getField(SOME_OTHER_FIELD)).isNull(); } @Test public void testWithMdcFieldTypes() throws Exception { Logger logger = lc.getLogger(getClass()); MDC.put("myMdcs", "String"); MDC.put("myMdcl", "1"); MDC.put("myMdci", "2"); MDC.put("myMdcd", "2.1"); MDC.put("myMdcf", "2.2"); logger.info(LOG_MESSAGE); assertThat(GelfTestSender.getMessages()).hasSize(1); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); Map<String, Object> jsonObject = JsonUtil.parseToMap(gelfMessage.toJson("")); assertThat(jsonObject.get("myMdcs")).isEqualTo("String"); assertThat(jsonObject.get("myMdcl")).isEqualTo(1); assertThat(jsonObject.get("myMdci")).isEqualTo(2); assertThat(jsonObject.get("myMdcd")).isEqualTo(2.1); assertThat(jsonObject.get("myMdcf")).isEqualTo(2.2); MDC.put("myMdcl", "1.1"); MDC.put("myMdci", "2.1"); MDC.put("myMdcd", "wrong"); MDC.put("myMdcf", "wrong"); GelfTestSender.getMessages().clear(); logger.info(LOG_MESSAGE); assertThat(GelfTestSender.getMessages()).hasSize(1); gelfMessage = GelfTestSender.getMessages().get(0); jsonObject = JsonUtil.parseToMap(gelfMessage.toJson("")); assertThat(jsonObject.get("myMdcl")).isEqualTo(1); assertThat(jsonObject.get("myMdci")).isEqualTo(2); assertThat(jsonObject.get("myMdcd")).isNull(); assertThat(jsonObject.get("myMdcf")).isEqualTo(0.0); MDC.put("myMdcl", "b"); MDC.put("myMdci", "a"); GelfTestSender.getMessages().clear(); logger.info(LOG_MESSAGE); assertThat(GelfTestSender.getMessages()).hasSize(1); gelfMessage = GelfTestSender.getMessages().get(0); jsonObject = JsonUtil.parseToMap(gelfMessage.toJson("")); assertThat(jsonObject.get("myMdcl")).isNull(); assertThat(jsonObject.get("myMdci")).isEqualTo(0); } }