diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 22eb8a7..845e2ce 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,9 +11,14 @@ updates: time: "09:00" timezone: Europe/Berlin ignore: - # logback 1.3 and 1.4 are compatible with slf4j 2.x only + # logback 1.3 and 1.4 are compatible with slf4j 2.x only and not supported right now - dependency-name: ch.qos.logback:logback-classic update-types: [version-update:semver-major, version-update:semver-minor] + - dependency-name: org.slf4j:slf4j-api + update-types: [version-update:semver-major] + # micronaut 4 will ship logback 1.4 + - dependency-name: io.micronaut:* + update-types: [version-update:semver-major] - package-ecosystem: github-actions directory: / open-pull-requests-limit: 10 diff --git a/README.md b/README.md index 13f87ec..b9640c1 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,29 @@ Include in your `pom.xml`: ``` +Or use in `dependencyManagement` in `pom.xml`: + +```xml + + + + io.kokuwa.micronaut + micronaut-logging + ${version.io.kokuwa.micronaut.logging} + pom + import + + + io.micronaut + micronaut-bom + ${version.io.micronaut} + pom + import + + + +``` + ## Features * Version [3.x](https://github.com/kokuwaio/micronaut-logging/tree/main) is based on SLF4J 1.7 & Logback 1.2 diff --git a/pom.xml b/pom.xml index 69f60ed..a0db353 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ io.kokuwa.micronaut micronaut-logging - 3.0.7-SNAPSHOT + 3.1.0-SNAPSHOT Logging Support for Micronaut Enhanced logging using MDC or request header. @@ -86,6 +86,7 @@ 3.1.1 3.0.1 3.1.1 + 3.5.1 3.5.0 3.3.0 3.0.0 @@ -101,20 +102,28 @@ 1.2.12 0.1.5 + ${project.version} 3.9.1 + 3.11.0 + 1.7.36 - - + + - io.micronaut - micronaut-bom - ${version.io.micronaut} - pom - import + io.kokuwa.micronaut + micronaut-logging + ${version.io.kokuwa.micronaut.logging} + + + + + org.slf4j + slf4j-api + ${version.org.slf4j.api} @@ -123,6 +132,11 @@ logback-classic ${version.ch.qos.logback} + + ch.qos.logback + logback-core + ${version.ch.qos.logback} + ch.qos.logback.contrib logback-json-classic @@ -147,31 +161,37 @@ io.micronaut micronaut-runtime + ${version.io.micronaut} provided io.micronaut.security micronaut-security + ${version.io.micronaut} provided io.micronaut.test micronaut-test-junit5 + ${version.io.micronaut} test io.micronaut micronaut-http-client + ${version.io.micronaut} test io.micronaut micronaut-http-server-netty + ${version.io.micronaut} test io.micronaut.security micronaut-security-jwt + ${version.io.micronaut} test @@ -258,6 +278,11 @@ maven-install-plugin ${version.org.apache.maven.plugins.install} + + org.apache.maven.plugins + maven-invoker-plugin + ${version.org.apache.maven.plugins.invoker} + org.apache.maven.plugins maven-jar-plugin @@ -276,6 +301,7 @@ @{project.version} release true + @{prefix} prepare release @{releaseLabel} [no ci] true @@ -311,6 +337,28 @@ + + + org.apache.maven.plugins + maven-invoker-plugin + + + + install + integration-test + verify + + + ${project.build.directory}/it + 1C + false + true + true + + + + + org.codehaus.mojo diff --git a/src/it/level-from-micronaut/invoker.properties b/src/it/level-from-micronaut/invoker.properties new file mode 100644 index 0000000..46bbf8c --- /dev/null +++ b/src/it/level-from-micronaut/invoker.properties @@ -0,0 +1 @@ +invoker.environmentVariables.LOGGER_LEVELS_IO_KOKUWA_MICRONAUT_LOGGING=DEBUG diff --git a/src/it/level-from-micronaut/pom.xml b/src/it/level-from-micronaut/pom.xml new file mode 100644 index 0000000..2a6450c --- /dev/null +++ b/src/it/level-from-micronaut/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + + @project.groupId@ + @project.artifactId@-it + LOCAL-SNAPSHOT + + + @project.artifactId@-it-level-from-micronaut + diff --git a/src/it/level-from-micronaut/postbuild.bsh b/src/it/level-from-micronaut/postbuild.bsh new file mode 100644 index 0000000..a280b60 --- /dev/null +++ b/src/it/level-from-micronaut/postbuild.bsh @@ -0,0 +1,21 @@ +// verify log + +String expected = "^[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{0,3} main DEBUG i.k.m.logging.LoggingTest test-output-marker$"; +String[] logs = org.codehaus.plexus.util.FileUtils.fileRead(basedir + "/build.log").split("\n"); + +for (String log : logs) { + if (!log.contains("test-output-marker")) { + continue; + } + if (java.util.regex.Pattern.matches(expected, log)) { + return true; + } else { + System.out.println("marker found, but formatting invalid:"); + System.out.println("[EXPECTED] " + expected); + System.out.println("[ACTUAL] " + log); + return false; + } +} + +System.out.println("marker not found"); +return false; diff --git a/src/it/log-gcp-from-env/invoker.properties b/src/it/log-gcp-from-env/invoker.properties new file mode 100644 index 0000000..f9f63a8 --- /dev/null +++ b/src/it/log-gcp-from-env/invoker.properties @@ -0,0 +1 @@ +invoker.environmentVariables.LOGBACK_APPENDER=GCP diff --git a/src/it/log-gcp-from-env/pom.xml b/src/it/log-gcp-from-env/pom.xml new file mode 100644 index 0000000..1c56178 --- /dev/null +++ b/src/it/log-gcp-from-env/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + + @project.groupId@ + @project.artifactId@-it + LOCAL-SNAPSHOT + + + @project.artifactId@-it-log-gcp-from-env + diff --git a/src/it/log-gcp-from-env/postbuild.bsh b/src/it/log-gcp-from-env/postbuild.bsh new file mode 100644 index 0000000..d9e0657 --- /dev/null +++ b/src/it/log-gcp-from-env/postbuild.bsh @@ -0,0 +1,21 @@ +// verify log + +String expected = "^\\{\"time\":\"202[3-9]-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{0,3}Z\",\"severity\":\"INFO\",\"thread\":\"main\",\"logger\":\"io.kokuwa.micronaut.logging.LoggingTest\",\"message\":\"test-output-marker\",\"raw-message\":\"test-output-marker\"}$"; +String[] logs = org.codehaus.plexus.util.FileUtils.fileRead(basedir + "/build.log").split("\n"); + +for (String log : logs) { + if (!log.contains("test-output-marker")) { + continue; + } + if (java.util.regex.Pattern.matches(expected, log)) { + return true; + } else { + System.out.println("marker found, but formatting invalid:"); + System.out.println("[EXPECTED] " + expected); + System.out.println("[ACTUAL] " + log); + return false; + } +} + +System.out.println("marker not found"); +return false; diff --git a/src/it/log-gcp-from-gcloud/invoker.properties b/src/it/log-gcp-from-gcloud/invoker.properties new file mode 100644 index 0000000..ec347b6 --- /dev/null +++ b/src/it/log-gcp-from-gcloud/invoker.properties @@ -0,0 +1 @@ +invoker.environmentVariables.GOOGLE_CLOUD_PROJECT=value diff --git a/src/it/log-gcp-from-gcloud/pom.xml b/src/it/log-gcp-from-gcloud/pom.xml new file mode 100644 index 0000000..0030546 --- /dev/null +++ b/src/it/log-gcp-from-gcloud/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + + @project.groupId@ + @project.artifactId@-it + LOCAL-SNAPSHOT + + + @project.artifactId@-it-log-gcp-from-gcloud + diff --git a/src/it/log-gcp-from-gcloud/postbuild.bsh b/src/it/log-gcp-from-gcloud/postbuild.bsh new file mode 100644 index 0000000..d9e0657 --- /dev/null +++ b/src/it/log-gcp-from-gcloud/postbuild.bsh @@ -0,0 +1,21 @@ +// verify log + +String expected = "^\\{\"time\":\"202[3-9]-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{0,3}Z\",\"severity\":\"INFO\",\"thread\":\"main\",\"logger\":\"io.kokuwa.micronaut.logging.LoggingTest\",\"message\":\"test-output-marker\",\"raw-message\":\"test-output-marker\"}$"; +String[] logs = org.codehaus.plexus.util.FileUtils.fileRead(basedir + "/build.log").split("\n"); + +for (String log : logs) { + if (!log.contains("test-output-marker")) { + continue; + } + if (java.util.regex.Pattern.matches(expected, log)) { + return true; + } else { + System.out.println("marker found, but formatting invalid:"); + System.out.println("[EXPECTED] " + expected); + System.out.println("[ACTUAL] " + log); + return false; + } +} + +System.out.println("marker not found"); +return false; diff --git a/src/it/log-json-from-env/invoker.properties b/src/it/log-json-from-env/invoker.properties new file mode 100644 index 0000000..08de0de --- /dev/null +++ b/src/it/log-json-from-env/invoker.properties @@ -0,0 +1 @@ +invoker.environmentVariables.LOGBACK_APPENDER=JSON diff --git a/src/it/log-json-from-env/pom.xml b/src/it/log-json-from-env/pom.xml new file mode 100644 index 0000000..1ae3e61 --- /dev/null +++ b/src/it/log-json-from-env/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + + @project.groupId@ + @project.artifactId@-it + LOCAL-SNAPSHOT + + + @project.artifactId@-it-log-json-from-env + diff --git a/src/it/log-json-from-env/postbuild.bsh b/src/it/log-json-from-env/postbuild.bsh new file mode 100644 index 0000000..0693fe0 --- /dev/null +++ b/src/it/log-json-from-env/postbuild.bsh @@ -0,0 +1,21 @@ +// verify log + +String expected = "^\\{\"timestamp\":\"[0-9]{13}\",\"level\":\"INFO\",\"thread\":\"main\",\"logger\":\"io.kokuwa.micronaut.logging.LoggingTest\",\"message\":\"test-output-marker\",\"raw-message\":\"test-output-marker\"}$"; +String[] logs = org.codehaus.plexus.util.FileUtils.fileRead(basedir + "/build.log").split("\n"); + +for (String log : logs) { + if (!log.contains("test-output-marker")) { + continue; + } + if (java.util.regex.Pattern.matches(expected, log)) { + return true; + } else { + System.out.println("marker found, but formatting invalid:"); + System.out.println("[EXPECTED] " + expected); + System.out.println("[ACTUAL] " + log); + return false; + } +} + +System.out.println("marker not found"); +return false; diff --git a/src/it/log-json-from-kubernetes/invoker.properties b/src/it/log-json-from-kubernetes/invoker.properties new file mode 100644 index 0000000..5bba112 --- /dev/null +++ b/src/it/log-json-from-kubernetes/invoker.properties @@ -0,0 +1 @@ +invoker.environmentVariables.KUBERNETES_SERVICE_HOST=value diff --git a/src/it/log-json-from-kubernetes/pom.xml b/src/it/log-json-from-kubernetes/pom.xml new file mode 100644 index 0000000..885bc3b --- /dev/null +++ b/src/it/log-json-from-kubernetes/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + + @project.groupId@ + @project.artifactId@-it + LOCAL-SNAPSHOT + + + @project.artifactId@-it-log-json-from-kubernetes + diff --git a/src/it/log-json-from-kubernetes/postbuild.bsh b/src/it/log-json-from-kubernetes/postbuild.bsh new file mode 100644 index 0000000..0693fe0 --- /dev/null +++ b/src/it/log-json-from-kubernetes/postbuild.bsh @@ -0,0 +1,21 @@ +// verify log + +String expected = "^\\{\"timestamp\":\"[0-9]{13}\",\"level\":\"INFO\",\"thread\":\"main\",\"logger\":\"io.kokuwa.micronaut.logging.LoggingTest\",\"message\":\"test-output-marker\",\"raw-message\":\"test-output-marker\"}$"; +String[] logs = org.codehaus.plexus.util.FileUtils.fileRead(basedir + "/build.log").split("\n"); + +for (String log : logs) { + if (!log.contains("test-output-marker")) { + continue; + } + if (java.util.regex.Pattern.matches(expected, log)) { + return true; + } else { + System.out.println("marker found, but formatting invalid:"); + System.out.println("[EXPECTED] " + expected); + System.out.println("[ACTUAL] " + log); + return false; + } +} + +System.out.println("marker not found"); +return false; diff --git a/src/it/log-text/pom.xml b/src/it/log-text/pom.xml new file mode 100644 index 0000000..d245ffd --- /dev/null +++ b/src/it/log-text/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + + @project.groupId@ + @project.artifactId@-it + LOCAL-SNAPSHOT + + + @project.artifactId@-it-log-text + diff --git a/src/it/log-text/postbuild.bsh b/src/it/log-text/postbuild.bsh new file mode 100644 index 0000000..aa337ea --- /dev/null +++ b/src/it/log-text/postbuild.bsh @@ -0,0 +1,21 @@ +// verify log + +String expected = "^[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{0,3} main INFO i.k.m.logging.LoggingTest test-output-marker$"; +String[] logs = org.codehaus.plexus.util.FileUtils.fileRead(basedir + "/build.log").split("\n"); + +for (String log : logs) { + if (!log.contains("test-output-marker")) { + continue; + } + if (java.util.regex.Pattern.matches(expected, log)) { + return true; + } else { + System.out.println("marker found, but formatting invalid:"); + System.out.println("[EXPECTED] " + expected); + System.out.println("[ACTUAL] " + log); + return false; + } +} + +System.out.println("marker not found"); +return false; diff --git a/src/it/logback-xml-custom/pom.xml b/src/it/logback-xml-custom/pom.xml new file mode 100644 index 0000000..d245ffd --- /dev/null +++ b/src/it/logback-xml-custom/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + + @project.groupId@ + @project.artifactId@-it + LOCAL-SNAPSHOT + + + @project.artifactId@-it-log-text + diff --git a/src/it/logback-xml-custom/postbuild.bsh b/src/it/logback-xml-custom/postbuild.bsh new file mode 100644 index 0000000..c6a3d94 --- /dev/null +++ b/src/it/logback-xml-custom/postbuild.bsh @@ -0,0 +1,21 @@ +// verify log + +String expected = "^TRACE io.kokuwa.micronaut.logging.LoggingTest test-output-marker$"; +String[] logs = org.codehaus.plexus.util.FileUtils.fileRead(basedir + "/build.log").split("\n"); + +for (String log : logs) { + if (!log.contains("test-output-marker")) { + continue; + } + if (java.util.regex.Pattern.matches(expected, log)) { + return true; + } else { + System.out.println("marker found, but formatting invalid:"); + System.out.println("[EXPECTED] " + expected); + System.out.println("[ACTUAL] " + log); + return false; + } +} + +System.out.println("marker not found"); +return false; diff --git a/src/it/logback-xml-custom/src/test/resources/logback.xml b/src/it/logback-xml-custom/src/test/resources/logback.xml new file mode 100644 index 0000000..a704605 --- /dev/null +++ b/src/it/logback-xml-custom/src/test/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + %-5level %logger{40} %msg%n + + + + + + + + diff --git a/src/it/pom.xml b/src/it/pom.xml new file mode 100644 index 0000000..0641bc1 --- /dev/null +++ b/src/it/pom.xml @@ -0,0 +1,179 @@ + + + 4.0.0 + + @project.groupId@ + @project.artifactId@-it + LOCAL-SNAPSHOT + pom + + + log-text + log-json-from-env + log-json-from-kubernetes + log-gcp-from-env + log-gcp-from-gcloud + level-from-micronaut + logback-xml-custom + + + + + + + + + @project.build.sourceEncoding@ + + @maven.compiler.source@ + @maven.compiler.target@ + true + true + true + true + false + + + + + + + + @version.org.apache.maven.plugins.compiler@ + @version.org.apache.maven.plugins.install@ + @version.org.apache.maven.plugins.jar@ + @version.org.apache.maven.plugins.resources@ + @version.org.apache.maven.plugins.surefire@ + + + + @version.io.kokuwa.micronaut.logging@ + @version.io.micronaut@ + + + + + + + io.kokuwa.micronaut + micronaut-logging + ${version.io.kokuwa.micronaut.logging} + pom + import + + + io.micronaut + micronaut-bom + ${version.io.micronaut} + pom + import + + + + + + + + io.micronaut + micronaut-runtime + + + io.micronaut.test + micronaut-test-junit5 + test + + + io.kokuwa.micronaut + micronaut-logging + runtime + + + + + + ${project.basedir}/../src/test/java + + + + org.apache.maven.plugins + maven-compiler-plugin + ${version.org.apache.maven.plugins.compiler} + + + + io.micronaut + micronaut-inject-java + ${version.io.micronaut} + + + + + + org.apache.maven.plugins + maven-install-plugin + ${version.org.apache.maven.plugins.install} + + + org.apache.maven.plugins + maven-jar-plugin + ${version.org.apache.maven.plugins.jar} + + + org.apache.maven.plugins + maven-resources-plugin + ${version.org.apache.maven.plugins.resources} + + + org.apache.maven.plugins + maven-surefire-plugin + ${version.org.apache.maven.plugins.surefire} + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + + + default-resources + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + default-compile + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + default-jar + + + + + + org.apache.maven.plugins + maven-install-plugin + + + default-install + + + + + + + + diff --git a/src/it/src/test/java/io/kokuwa/micronaut/logging/LoggingTest.java b/src/it/src/test/java/io/kokuwa/micronaut/logging/LoggingTest.java new file mode 100644 index 0000000..2d8463a --- /dev/null +++ b/src/it/src/test/java/io/kokuwa/micronaut/logging/LoggingTest.java @@ -0,0 +1,13 @@ +package io.kokuwa.micronaut.logging; + +@io.micronaut.test.extensions.junit5.annotation.MicronautTest +public class LoggingTest { + + @org.junit.jupiter.api.Test + void log() { + var log = org.slf4j.LoggerFactory.getLogger(LoggingTest.class); + log.trace("test-output-marker"); + log.debug("test-output-marker"); + log.info("test-output-marker"); + } +}