From 16dc441ac5593e31e74ee7d0a96f5cf696333d72 Mon Sep 17 00:00:00 2001 From: technoddy Date: Sun, 14 Jan 2024 12:38:26 -0500 Subject: [PATCH 1/5] 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()); + } +} From 3563a3e35a4ed62976fbdf368e9d5b8ae970ec93 Mon Sep 17 00:00:00 2001 From: technoddy Date: Sun, 17 Mar 2024 20:54:28 -0400 Subject: [PATCH 2/5] adding live test --- .../spring-boot-logging-loki/README.md | 1 + .../spring-boot-logging-loki/pom.xml | 41 +++++++++ .../java/com/baeldung/loki/DemoService.java | 15 ++++ ...pringBootLogbackExtensionsApplication.java | 22 +++++ .../src/main/resources/logback-spring.xml | 48 +++++++++++ .../baeldung/loki/DemoServiceLiveTest.java | 86 +++++++++++++++++++ 6 files changed, 213 insertions(+) create mode 100644 spring-boot-modules/spring-boot-logging-loki/README.md create mode 100644 spring-boot-modules/spring-boot-logging-loki/pom.xml create mode 100644 spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/DemoService.java create mode 100644 spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/SpringBootLogbackExtensionsApplication.java create mode 100644 spring-boot-modules/spring-boot-logging-loki/src/main/resources/logback-spring.xml create mode 100644 spring-boot-modules/spring-boot-logging-loki/src/test/java/com/baeldung/loki/DemoServiceLiveTest.java diff --git a/spring-boot-modules/spring-boot-logging-loki/README.md b/spring-boot-modules/spring-boot-logging-loki/README.md new file mode 100644 index 0000000000..e320af31b4 --- /dev/null +++ b/spring-boot-modules/spring-boot-logging-loki/README.md @@ -0,0 +1 @@ +### Relevant Articles: \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-logging-loki/pom.xml b/spring-boot-modules/spring-boot-logging-loki/pom.xml new file mode 100644 index 0000000000..fa568119fb --- /dev/null +++ b/spring-boot-modules/spring-boot-logging-loki/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + spring-boot-logging-loki + 0.1-SNAPSHOT + loki + + + com.baeldung.spring-boot-modules + spring-boot-modules + 1.0.0-SNAPSHOT + + + + + com.github.loki4j + loki-logback-appender + ${loki-logback.version} + + + org.springframework.boot + spring-boot-starter-test + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + + + 1.4.2 + + \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/DemoService.java b/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/DemoService.java new file mode 100644 index 0000000000..236e5b530c --- /dev/null +++ b/spring-boot-modules/spring-boot-logging-loki/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/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/SpringBootLogbackExtensionsApplication.java b/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/SpringBootLogbackExtensionsApplication.java new file mode 100644 index 0000000000..28e455a7ea --- /dev/null +++ b/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/SpringBootLogbackExtensionsApplication.java @@ -0,0 +1,22 @@ +package com.baeldung.extensions; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringBootLogbackExtensionsApplication { + + private static final Logger logger = LoggerFactory.getLogger(SpringBootLogbackExtensionsApplication.class); + + public static void main(String[] args) { + SpringApplication.run(SpringBootLogbackExtensionsApplication.class, args); + + logger.debug("Debug log message"); + logger.info("Info log message"); + logger.error("Error log message"); + logger.warn("Warn log message"); + logger.trace("Trace log message"); + } +} diff --git a/spring-boot-modules/spring-boot-logging-loki/src/main/resources/logback-spring.xml b/spring-boot-modules/spring-boot-logging-loki/src/main/resources/logback-spring.xml new file mode 100644 index 0000000000..c4711c1680 --- /dev/null +++ b/spring-boot-modules/spring-boot-logging-loki/src/main/resources/logback-spring.xml @@ -0,0 +1,48 @@ + + + + + + + + + { + "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/spring-boot-modules/spring-boot-logging-loki/src/test/java/com/baeldung/loki/DemoServiceLiveTest.java b/spring-boot-modules/spring-boot-logging-loki/src/test/java/com/baeldung/loki/DemoServiceLiveTest.java new file mode 100644 index 0000000000..cf6091c2aa --- /dev/null +++ b/spring-boot-modules/spring-boot-logging-loki/src/test/java/com/baeldung/loki/DemoServiceLiveTest.java @@ -0,0 +1,86 @@ +package com.baeldung.loki; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.verify; + +import java.net.URI; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +@SpringBootTest(classes = DemoService.class) +public class DemoServiceLiveTest { + + @Test + public void givenLokiContainerRunning_whenDemoServiceInvoked_thenLokiAppenderCollectLogs() throws JsonProcessingException, InterruptedException { + DemoService service = new DemoService(); + service.log(); + Thread.sleep(2000); + String baseUrl = "http://localhost:3100/loki/api/v1/query_range"; + // Set up query parameters + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + String query = "{level=\"INFO\"} |= `DemoService.log invoked!!!`"; + // Get current time in UTC + LocalDateTime currentDateTime = LocalDateTime.now(ZoneOffset.UTC); + String current_time_est = currentDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")); + + LocalDateTime tenMinsAgo = currentDateTime.minusMinutes(10); + String start_time_est = tenMinsAgo.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")); + System.out.println(start_time_est); + + URI uri = UriComponentsBuilder.fromUriString(baseUrl) + .queryParam("query", query) + .queryParam("start", start_time_est) + .queryParam("end", current_time_est) + .build() + .toUri(); + + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity response = restTemplate.exchange( + uri, + HttpMethod.GET, + new HttpEntity<>(headers), + String.class + ); + + List messages = new ArrayList<>(); + ObjectMapper objectMapper = new ObjectMapper(); + if (response.getStatusCode() == HttpStatus.OK) { + String responseBody = response.getBody(); + JsonNode jsonNode = objectMapper.readTree(responseBody); + JsonNode result = jsonNode.get("data").get("result").get(0).get("values"); + result.iterator().forEachRemaining(e-> { + Iterator elements = e.elements(); + elements.forEachRemaining(f -> + messages.add(f.toString()) + ); + }); + } else { + System.out.println("Error: " + response.getStatusCodeValue()); + } + + String expected = "DemoService.log invoked!!!"; + assertTrue(messages.stream().anyMatch(e -> e.contains(expected))); + } +} From 329a01ec93bb6786befe6e62829ded80cd13fe4a Mon Sep 17 00:00:00 2001 From: technoddy Date: Sun, 17 Mar 2024 20:58:11 -0400 Subject: [PATCH 3/5] deleting / moving project dir --- 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 -------------- .../spring-boot-logging-loki/pom.xml | 6 -- .../java/com/baeldung/loki/DemoService.java | 2 +- ...pringBootLogbackExtensionsApplication.java | 22 ------- .../src/main/resources/logback-spring.xml | 16 ----- .../baeldung/loki/DemoServiceLiveTest.java | 7 +- 10 files changed, 5 insertions(+), 233 deletions(-) delete mode 100644 logging-modules/loki-logback/README.md delete mode 100644 logging-modules/loki-logback/pom.xml delete mode 100644 logging-modules/loki-logback/src/main/java/com/baeldung/loki/DemoService.java delete mode 100644 logging-modules/loki-logback/src/main/resources/logback-spring.xml delete mode 100644 logging-modules/loki-logback/src/test/java/com/baeldung/loki/DemoServiceTest.java delete mode 100644 spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/SpringBootLogbackExtensionsApplication.java diff --git a/logging-modules/loki-logback/README.md b/logging-modules/loki-logback/README.md deleted file mode 100644 index e320af31b4..0000000000 --- a/logging-modules/loki-logback/README.md +++ /dev/null @@ -1 +0,0 @@ -### Relevant Articles: \ No newline at end of file diff --git a/logging-modules/loki-logback/pom.xml b/logging-modules/loki-logback/pom.xml deleted file mode 100644 index 7cc052b06f..0000000000 --- a/logging-modules/loki-logback/pom.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - 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 deleted file mode 100644 index e9071c0de9..0000000000 --- a/logging-modules/loki-logback/src/main/java/com/baeldung/loki/DemoService.java +++ /dev/null @@ -1,15 +0,0 @@ -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 deleted file mode 100644 index fa4b92f2f6..0000000000 --- a/logging-modules/loki-logback/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - { - "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 deleted file mode 100644 index be88b80445..0000000000 --- a/logging-modules/loki-logback/src/test/java/com/baeldung/loki/DemoServiceTest.java +++ /dev/null @@ -1,49 +0,0 @@ -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()); - } -} diff --git a/spring-boot-modules/spring-boot-logging-loki/pom.xml b/spring-boot-modules/spring-boot-logging-loki/pom.xml index fa568119fb..5b2887562b 100644 --- a/spring-boot-modules/spring-boot-logging-loki/pom.xml +++ b/spring-boot-modules/spring-boot-logging-loki/pom.xml @@ -27,12 +27,6 @@ org.springframework.boot spring-boot-starter-web - - org.springframework.boot - spring-boot-devtools - runtime - true - diff --git a/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/DemoService.java b/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/DemoService.java index 236e5b530c..e9071c0de9 100644 --- a/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/DemoService.java +++ b/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/DemoService.java @@ -10,6 +10,6 @@ public class DemoService { private final Logger LOG = LoggerFactory.getLogger(DemoService.class); public void log() { - LOG.info("DemoService.log invoked!!!"); + LOG.info("DemoService.log invoked"); } } diff --git a/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/SpringBootLogbackExtensionsApplication.java b/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/SpringBootLogbackExtensionsApplication.java deleted file mode 100644 index 28e455a7ea..0000000000 --- a/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/SpringBootLogbackExtensionsApplication.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.extensions; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class SpringBootLogbackExtensionsApplication { - - private static final Logger logger = LoggerFactory.getLogger(SpringBootLogbackExtensionsApplication.class); - - public static void main(String[] args) { - SpringApplication.run(SpringBootLogbackExtensionsApplication.class, args); - - logger.debug("Debug log message"); - logger.info("Info log message"); - logger.error("Error log message"); - logger.warn("Warn log message"); - logger.trace("Trace log message"); - } -} diff --git a/spring-boot-modules/spring-boot-logging-loki/src/main/resources/logback-spring.xml b/spring-boot-modules/spring-boot-logging-loki/src/main/resources/logback-spring.xml index c4711c1680..1ba53d7278 100644 --- a/spring-boot-modules/spring-boot-logging-loki/src/main/resources/logback-spring.xml +++ b/spring-boot-modules/spring-boot-logging-loki/src/main/resources/logback-spring.xml @@ -2,21 +2,6 @@ - - - - - { - "level":"%level", - "class":"%logger{36}", - "thread":"%thread", - "message": "%message", - "requestId": "%X{X-Request-ID}" - } - - - - http://localhost:3100/loki/api/v1/push @@ -41,7 +26,6 @@ - diff --git a/spring-boot-modules/spring-boot-logging-loki/src/test/java/com/baeldung/loki/DemoServiceLiveTest.java b/spring-boot-modules/spring-boot-logging-loki/src/test/java/com/baeldung/loki/DemoServiceLiveTest.java index cf6091c2aa..c99a6e6766 100644 --- a/spring-boot-modules/spring-boot-logging-loki/src/test/java/com/baeldung/loki/DemoServiceLiveTest.java +++ b/spring-boot-modules/spring-boot-logging-loki/src/test/java/com/baeldung/loki/DemoServiceLiveTest.java @@ -37,17 +37,18 @@ public class DemoServiceLiveTest { service.log(); Thread.sleep(2000); String baseUrl = "http://localhost:3100/loki/api/v1/query_range"; + // Set up query parameters HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - String query = "{level=\"INFO\"} |= `DemoService.log invoked!!!`"; + String query = "{level=\"INFO\"} |= `DemoService.log invoked`"; + // Get current time in UTC LocalDateTime currentDateTime = LocalDateTime.now(ZoneOffset.UTC); String current_time_est = currentDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")); LocalDateTime tenMinsAgo = currentDateTime.minusMinutes(10); String start_time_est = tenMinsAgo.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")); - System.out.println(start_time_est); URI uri = UriComponentsBuilder.fromUriString(baseUrl) .queryParam("query", query) @@ -80,7 +81,7 @@ public class DemoServiceLiveTest { System.out.println("Error: " + response.getStatusCodeValue()); } - String expected = "DemoService.log invoked!!!"; + String expected = "DemoService.log invoked"; assertTrue(messages.stream().anyMatch(e -> e.contains(expected))); } } From 12f1cdc1a3732171fea1f38388dc10006d15a9e3 Mon Sep 17 00:00:00 2001 From: technoddy Date: Wed, 20 Mar 2024 23:22:41 -0400 Subject: [PATCH 4/5] feedback updates --- .../baeldung/loki/DemoServiceLiveTest.java | 52 +++++++++---------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/spring-boot-modules/spring-boot-logging-loki/src/test/java/com/baeldung/loki/DemoServiceLiveTest.java b/spring-boot-modules/spring-boot-logging-loki/src/test/java/com/baeldung/loki/DemoServiceLiveTest.java index c99a6e6766..4c44888dca 100644 --- a/spring-boot-modules/spring-boot-logging-loki/src/test/java/com/baeldung/loki/DemoServiceLiveTest.java +++ b/spring-boot-modules/spring-boot-logging-loki/src/test/java/com/baeldung/loki/DemoServiceLiveTest.java @@ -1,8 +1,7 @@ package com.baeldung.loki; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.verify; import java.net.URI; import java.time.LocalDateTime; @@ -31,13 +30,17 @@ import com.fasterxml.jackson.databind.ObjectMapper; @SpringBootTest(classes = DemoService.class) public class DemoServiceLiveTest { + /** + * This test assumes that loki service is already up. + * For more details please check section #2 Running Loki and Grafana Service + * Which spin up Loki server using docker-compose + */ @Test public void givenLokiContainerRunning_whenDemoServiceInvoked_thenLokiAppenderCollectLogs() throws JsonProcessingException, InterruptedException { DemoService service = new DemoService(); service.log(); - Thread.sleep(2000); - String baseUrl = "http://localhost:3100/loki/api/v1/query_range"; + String baseUrl = "http://localhost:3100/loki/api/v1/query_range"; // Set up query parameters HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); @@ -45,43 +48,38 @@ public class DemoServiceLiveTest { // Get current time in UTC LocalDateTime currentDateTime = LocalDateTime.now(ZoneOffset.UTC); - String current_time_est = currentDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")); + String currentTimeUtc = currentDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")); - LocalDateTime tenMinsAgo = currentDateTime.minusMinutes(10); - String start_time_est = tenMinsAgo.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")); + LocalDateTime tenMinsAgo = currentDateTime.minusMinutes(10); + String startTimeUtc = tenMinsAgo.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")); URI uri = UriComponentsBuilder.fromUriString(baseUrl) .queryParam("query", query) - .queryParam("start", start_time_est) - .queryParam("end", current_time_est) + .queryParam("start", startTimeUtc) + .queryParam("end", currentTimeUtc) .build() .toUri(); RestTemplate restTemplate = new RestTemplate(); - ResponseEntity response = restTemplate.exchange( - uri, - HttpMethod.GET, - new HttpEntity<>(headers), - String.class - ); + ResponseEntity response = restTemplate.exchange(uri, HttpMethod.GET, new HttpEntity<>(headers), String.class); List messages = new ArrayList<>(); ObjectMapper objectMapper = new ObjectMapper(); - if (response.getStatusCode() == HttpStatus.OK) { - String responseBody = response.getBody(); - JsonNode jsonNode = objectMapper.readTree(responseBody); - JsonNode result = jsonNode.get("data").get("result").get(0).get("values"); - result.iterator().forEachRemaining(e-> { + assertEquals(response.getStatusCode(), HttpStatus.OK); + + String responseBody = response.getBody(); + JsonNode jsonNode = objectMapper.readTree(responseBody); + JsonNode result = jsonNode.get("data") + .get("result") + .get(0) + .get("values"); + result.iterator() + .forEachRemaining(e -> { Iterator elements = e.elements(); - elements.forEachRemaining(f -> - messages.add(f.toString()) - ); + elements.forEachRemaining(f -> messages.add(f.toString())); }); - } else { - System.out.println("Error: " + response.getStatusCodeValue()); - } String expected = "DemoService.log invoked"; - assertTrue(messages.stream().anyMatch(e -> e.contains(expected))); + assertThat(messages).anyMatch(e -> e.contains(expected)); } } From c8b7d97ea79039906f93e4d9e3e79e7fb3623a23 Mon Sep 17 00:00:00 2001 From: technoddy Date: Thu, 28 Mar 2024 23:14:08 -0400 Subject: [PATCH 5/5] pr feedback --- .../src/main/java/com/baeldung/loki/DemoService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/DemoService.java b/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/DemoService.java index e9071c0de9..89fdcc48e8 100644 --- a/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/DemoService.java +++ b/spring-boot-modules/spring-boot-logging-loki/src/main/java/com/baeldung/loki/DemoService.java @@ -7,7 +7,7 @@ import org.springframework.stereotype.Service; @Service public class DemoService { - private final Logger LOG = LoggerFactory.getLogger(DemoService.class); + private static final Logger LOG = LoggerFactory.getLogger(DemoService.class); public void log() { LOG.info("DemoService.log invoked");