package biz.paluch.logging.gelf.jul; import static org.assertj.core.api.Assertions.assertThat; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.Logger; import org.apache.log4j.MDC; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import biz.paluch.logging.gelf.GelfTestSender; import biz.paluch.logging.gelf.intern.GelfMessage; /** * @author Mark Paluch * @since 27.09.13 08:25 */ public class GelfLogHandlerTests { @BeforeEach public void before() throws Exception { GelfTestSender.getMessages().clear(); LogManager.getLogManager().readConfiguration(getClass().getResourceAsStream("/jul/test-logging.properties")); MDC.remove("mdcField1"); } private void assertExpectedMessage(String expectedMessage) { assertThat(GelfTestSender.getMessages()).hasSize(1); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); assertThat(gelfMessage.getVersion()).isEqualTo(GelfMessage.GELF_VERSION_1_1); assertThat(gelfMessage.getField("MyTime")).isNotNull(); assertThat(gelfMessage.getFullMessage()).isEqualTo(expectedMessage); assertThat(gelfMessage.getLevel()).isEqualTo("6"); assertThat(gelfMessage.getShortMessage()).isEqualTo(expectedMessage); assertThat(gelfMessage.getMaximumMessageSize()).isEqualTo(8192); } @Test public void testWithoutResourceBundle() throws Exception { Logger logger = Logger.getLogger(getClass().getName()); String expectedMessage = "message1"; Object[] params = new Object[] { "a", "b", "c" }; logger.log(Level.INFO, expectedMessage, params); assertThat(GelfTestSender.getMessages()).hasSize(1); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); assertThat(gelfMessage.getField("MessageParam0")).isEqualTo("a"); assertThat(gelfMessage.getField("MessageParam1")).isEqualTo("b"); assertExpectedMessage(expectedMessage); } @Test public void testWithoutMessageParameters() throws Exception { LogManager.getLogManager() .readConfiguration(getClass().getResourceAsStream("/jul/test-logging-without-message-parameters.properties")); Logger logger = Logger.getLogger(getClass().getName()); String expectedMessage = "message1"; Object[] params = new Object[] { "a", "b", "c" }; logger.log(Level.INFO, expectedMessage, params); assertThat(GelfTestSender.getMessages()).hasSize(1); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); assertThat(gelfMessage.getField("MessageParam0")).isNull(); assertThat(gelfMessage.getField("MessageParam1")).isNull(); } @Test public void testWithResourceBundleFormattingWithCurlyBrackets() throws Exception { Logger logger = Logger.getLogger(getClass().getName(), "messages"); String expectedMessage = "params a and b"; Object[] params = new Object[] { "a", "b", "c" }; logger.log(Level.INFO, "message.format.curly.brackets", params); assertExpectedMessage(expectedMessage); } @Test public void testWithResourceBundleFormattingWithoutParameters() throws Exception { Logger logger = Logger.getLogger(getClass().getName(), "messages"); String expectedMessage = "no parameter supplied"; logger.log(Level.INFO, "message.format.withoutParameter"); assertExpectedMessage(expectedMessage); } @Test public void testWithResourceBundleFormattingMalformed1() throws Exception { Logger logger = Logger.getLogger(getClass().getName(), "messages"); String expectedMessage = "message.format.fail1"; Object[] params = new Object[] { "a", "b", "c" }; logger.log(Level.INFO, "message.format.fail1", params); assertExpectedMessage(expectedMessage); } @Test public void testWithResourceBundleFormattingMalformed2() throws Exception { Logger logger = Logger.getLogger(getClass().getName(), "messages"); String expectedMessage = "message.format.fail2"; Object[] params = new Object[] { "a", "b", "c" }; logger.log(Level.INFO, "message.format.fail2", params); assertExpectedMessage(expectedMessage); } @Test public void testWithResourceBundleFormattingWithPercentages() throws Exception { Logger logger = Logger.getLogger(getClass().getName(), "messages"); String expectedMessage = "params a and 1"; Object[] params = new Object[] { "a", 1, "c" }; logger.log(Level.INFO, "message.format.percentages", params); assertExpectedMessage(expectedMessage); } @Test public void testSimpleInfo() throws Exception { Logger logger = Logger.getLogger(getClass().getName()); String expectedMessage = "foo bar test log message"; logger.info(expectedMessage); assertExpectedMessage(expectedMessage); } @Test public void testSimpleNull() throws Exception { Logger logger = Logger.getLogger(getClass().getName()); String expectedMessage = null; logger.info(expectedMessage); assertThat(GelfTestSender.getMessages()).isEmpty(); } @Test public void testSimpleWarning() throws Exception { Logger logger = Logger.getLogger(getClass().getName()); String expectedMessage = "foo bar test log message"; logger.warning(expectedMessage); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); assertThat(gelfMessage.getLevel()).isEqualTo("4"); } @Test public void testSimpleSevere() throws Exception { Logger logger = Logger.getLogger(getClass().getName()); String expectedMessage = "foo bar test log message"; logger.severe(expectedMessage); GelfMessage gelfMessage = GelfTestSender.getMessages().get(0); assertThat(gelfMessage.getLevel()).isEqualTo("3"); } @Test public void testNullMessageAndExceptionFallback() throws Exception { Logger logger = Logger.getLogger(getClass().getName()); logger.log(Level.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 = Logger.getLogger(getClass().getName()); logger.log(Level.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 = Logger.getLogger(getClass().getName()); logger.info(""); assertThat(GelfTestSender.getMessages()).isEmpty(); } }