From 16dc441ac5593e31e74ee7d0a96f5cf696333d72 Mon Sep 17 00:00:00 2001 From: technoddy Date: Sun, 14 Jan 2024 12:38:26 -0500 Subject: [PATCH] implementation for bael-7192 --- logging-modules/loki-logback/README.md | 1 + logging-modules/loki-logback/pom.xml | 65 +++++++++++++++++++ .../java/com/baeldung/loki/DemoService.java | 15 +++++ .../src/main/resources/logback-spring.xml | 55 ++++++++++++++++ .../com/baeldung/loki/DemoServiceTest.java | 49 ++++++++++++++ 5 files changed, 185 insertions(+) create mode 100644 logging-modules/loki-logback/README.md create mode 100644 logging-modules/loki-logback/pom.xml create mode 100644 logging-modules/loki-logback/src/main/java/com/baeldung/loki/DemoService.java create mode 100644 logging-modules/loki-logback/src/main/resources/logback-spring.xml create mode 100644 logging-modules/loki-logback/src/test/java/com/baeldung/loki/DemoServiceTest.java diff --git a/logging-modules/loki-logback/README.md b/logging-modules/loki-logback/README.md new file mode 100644 index 0000000000..e320af31b4 --- /dev/null +++ b/logging-modules/loki-logback/README.md @@ -0,0 +1 @@ +### Relevant Articles: \ No newline at end of file diff --git a/logging-modules/loki-logback/pom.xml b/logging-modules/loki-logback/pom.xml new file mode 100644 index 0000000000..7cc052b06f --- /dev/null +++ b/logging-modules/loki-logback/pom.xml @@ -0,0 +1,65 @@ + + + 4.0.0 + logback + 0.1-SNAPSHOT + logback + + + org.springframework.boot + spring-boot-starter-parent + 3.2.0 + + + + + + com.github.loki4j + loki-logback-appender + ${loki-logback.version} + + + org.mockito + mockito-core + ${mockito.version} + test + + + org.junit + junit-bom + ${junit-jupiter.version} + pom + import + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.springframework.boot + spring-boot-starter-test + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + + + 0.1.5 + 1.4.2 + 2.0.4 + 1.18.22 + 5.6.0 + + + \ No newline at end of file diff --git a/logging-modules/loki-logback/src/main/java/com/baeldung/loki/DemoService.java b/logging-modules/loki-logback/src/main/java/com/baeldung/loki/DemoService.java new file mode 100644 index 0000000000..e9071c0de9 --- /dev/null +++ b/logging-modules/loki-logback/src/main/java/com/baeldung/loki/DemoService.java @@ -0,0 +1,15 @@ +package com.baeldung.loki; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +@Service +public class DemoService { + + private final Logger LOG = LoggerFactory.getLogger(DemoService.class); + + public void log() { + LOG.info("DemoService.log invoked"); + } +} diff --git a/logging-modules/loki-logback/src/main/resources/logback-spring.xml b/logging-modules/loki-logback/src/main/resources/logback-spring.xml new file mode 100644 index 0000000000..fa4b92f2f6 --- /dev/null +++ b/logging-modules/loki-logback/src/main/resources/logback-spring.xml @@ -0,0 +1,55 @@ + + + + + + + + + { + "level":"%level", + "class":"%logger{36}", + "thread":"%thread", + "message": "%message", + "requestId": "%X{X-Request-ID}" + } + + + + + + + + + + + http://localhost:3100/loki/api/v1/push + + + + + + + + { + "level":"%level", + "class":"%logger{36}", + "thread":"%thread", + "message": "%message", + "requestId": "%X{X-Request-ID}" + } + + + + + + + + + + + \ No newline at end of file diff --git a/logging-modules/loki-logback/src/test/java/com/baeldung/loki/DemoServiceTest.java b/logging-modules/loki-logback/src/test/java/com/baeldung/loki/DemoServiceTest.java new file mode 100644 index 0000000000..be88b80445 --- /dev/null +++ b/logging-modules/loki-logback/src/test/java/com/baeldung/loki/DemoServiceTest.java @@ -0,0 +1,49 @@ +package com.baeldung.loki; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.text.ParseException; +import java.util.List; + +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.Mock; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.Appender; + +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest(classes = DemoService.class) +public class DemoServiceTest { + + @Mock + Appender appender; + + @Captor + ArgumentCaptor captor; + + @Test + public void givenLokiAppender_whenSampleServiceInvoked_ThenCaptureInfoLog() throws ParseException { + ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); + when(appender.getName()).thenReturn("loki-logback-appender"); + logger.addAppender(appender); + + DemoService service = new DemoService(); + service.log(); + + verify(appender, times(1)).doAppend(captor.capture()); + List allValues = captor.getAllValues(); + assertEquals(1, allValues.size()); + ILoggingEvent event = allValues.get(0); + assertEquals(event.getLevel(), Level.INFO); + assertEquals("DemoService.log invoked", event.getFormattedMessage()); + } +}