package biz.paluch.logging.gelf.logback; import static org.assertj.core.api.Assertions.assertThat; import org.junit.jupiter.api.Test; import org.slf4j.MDC; import org.slf4j.MarkerFactory; import biz.paluch.logging.gelf.GelfTestSender; import biz.paluch.logging.gelf.LogMessageField; import biz.paluch.logging.gelf.MdcGelfMessageAssembler; import biz.paluch.logging.gelf.intern.GelfMessage; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; /** * @author Mark Paluch * @author <a href="mailto:tobiassebastian.kaefer@1und1.de">Tobias Kaefer</a> * @since 27.09.13 08:16 */ public abstract class AbstractGelfLogAppenderTests { public static final String LOG_MESSAGE = "foo bar test log message"; public static final String EXPECTED_LOG_MESSAGE = LOG_MESSAGE; LoggerContext lc = null; @Test public void testLevels() throws Exception { Logger logger = lc.getLogger(getClass()); assertThat(GelfTestSender.getMessages()).isEmpty(); logger.debug(LOG_MESSAGE); assertThat(GelfTestSender.getMessages()).isEmpty(); logger.info(LOG_MESSAGE); assertThat(GelfTestSender.getMessages().get(0).getLevel()).isEqualTo("6"); GelfTestSender.getMessages().clear(); logger.warn(LOG_MESSAGE); assertThat(GelfTestSender.getMessages().get(0).getLevel()).isEqualTo("4"); GelfTestSender.getMessages().clear(); logger.error(LOG_MESSAGE); assertThat(GelfTestSender.getMessages().get(0).getLevel()).isEqualTo("3"); GelfTestSender.getMessages().clear(); logger.log(null, getClass().getName(), 0, LOG_MESSAGE, new Object[0], null); assertThat(GelfTestSender.getMessages()).isEmpty(); logger.log(null, getClass().getName(), 10, LOG_MESSAGE, new Object[0], null); assertThat(GelfTestSender.getMessages()).isEmpty(); logger.log(null, getClass().getName(), 20, LOG_MESSAGE, new Object[0], null); assertThat(GelfTestSender.getMessages().get(0).getLevel()).isEqualTo("6"); GelfTestSender.getMessages().clear(); logger.log(null, getClass().getName(), 30, LOG_MESSAGE, new Object[0], null); assertThat(GelfTestSender.getMessages().get(0).getLevel()).isEqualTo("4"); GelfTestSender.getMessages().clear(); logger.log(null, getClass().getName(), 40, LOG_MESSAGE, new Object[0], null); assertThat(GelfTestSender.getMessages().get(0).getLevel()).isEqualTo("3"); GelfTestSender.getMessages().clear(); } @Test public void testSimpleInfo() throws Exception { Logger logger = lc.getLogger(getClass()); logger.info(LOG_MESSAGE); assertThat(GelfTestSender.getMessages()).hasSize(1); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); assertThat(gelfMessage.getFullMessage()).isEqualTo(EXPECTED_LOG_MESSAGE); assertThat(gelfMessage.getShortMessage()).isEqualTo(EXPECTED_LOG_MESSAGE); assertThat(gelfMessage.getVersion()).isEqualTo(GelfMessage.GELF_VERSION_1_1); assertThat(gelfMessage.getField("MyTime")).isNotNull(); assertThat(gelfMessage.getLevel()).isEqualTo("6"); assertThat(gelfMessage.getMaximumMessageSize()).isEqualTo(8192); } @Test public void testMarker() throws Exception { Logger logger = lc.getLogger(getClass()); logger.info(MarkerFactory.getMarker("basic"), LOG_MESSAGE); assertThat(GelfTestSender.getMessages()).hasSize(1); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); assertThat(gelfMessage.getFullMessage()).isEqualTo(EXPECTED_LOG_MESSAGE); assertThat(gelfMessage.getShortMessage()).isEqualTo(EXPECTED_LOG_MESSAGE); assertThat(gelfMessage.getAdditonalFields().get("Marker")).isEqualTo("basic"); assertThat(gelfMessage.getLevel()).isEqualTo("6"); assertThat(gelfMessage.getMaximumMessageSize()).isEqualTo(8192); } @Test public void testException() throws Exception { Logger logger = lc.getLogger(getClass()); logger.info(LOG_MESSAGE, new Exception("this is an exception")); assertThat(GelfTestSender.getMessages()).hasSize(1); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); assertThat(gelfMessage.getFullMessage()).isEqualTo(EXPECTED_LOG_MESSAGE); assertThat(gelfMessage.getField(LogMessageField.NamedLogField.SourceClassName.getFieldName())) .isEqualTo(AbstractGelfLogAppenderTests.class.getName()); assertThat(gelfMessage.getField(LogMessageField.NamedLogField.SourceMethodName.getFieldName())) .isEqualTo("testException"); assertThat(gelfMessage.getField(MdcGelfMessageAssembler.FIELD_STACK_TRACE)).contains("this is an exception"); } @Test public void testFields() throws Exception { Logger logger = lc.getLogger(getClass()); MDC.put("mdcField1", "a value"); logger.info(LOG_MESSAGE); assertThat(GelfTestSender.getMessages()).hasSize(1); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); assertThat(gelfMessage.getField("fieldName1")).isEqualTo("fieldValue1"); assertThat(gelfMessage.getField("fieldName2")).isEqualTo("fieldValue2"); assertThat(gelfMessage.getField("mdcField1")).isEqualTo("a value"); assertThat(gelfMessage.getField("mdcField2")).isNull(); assertThat(gelfMessage.getField(LogMessageField.NamedLogField.SourceLineNumber.name())).isNotNull(); assertThat(gelfMessage.getField(LogMessageField.NamedLogField.SourceMethodName.name())).isEqualTo("testFields"); assertThat(gelfMessage.getField(LogMessageField.NamedLogField.SourceClassName.name())) .isEqualTo(AbstractGelfLogAppenderTests.class.getName()); } @Test public void testNullMessageAndExceptionFallback() throws Exception { Logger logger = lc.getLogger(getClass()); logger.info(null, new IllegalStateException()); assertThat(GelfTestSender.getMessages()).hasSize(1); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); assertThat(gelfMessage.getFullMessage()).isEqualTo("java.lang.IllegalStateException"); assertThat(gelfMessage.getShortMessage()).isEqualTo("java.lang.IllegalStateException"); } @Test public void testEmptyMessageAndExceptionFallback() throws Exception { Logger logger = lc.getLogger(getClass()); logger.info("", new IllegalStateException("Help!")); assertThat(GelfTestSender.getMessages()).hasSize(1); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); assertThat(gelfMessage.getFullMessage()).isEqualTo("java.lang.IllegalStateException: Help!"); assertThat(gelfMessage.getShortMessage()).isEqualTo("java.lang.IllegalStateException: Help!"); } @Test public void testEmptyMessage() throws Exception { Logger logger = lc.getLogger(getClass()); logger.info(""); assertThat(GelfTestSender.getMessages()).isEmpty(); } }