diff --git a/README.md b/README.md index bfe11b59..5e72f084 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ This library is mostly based on * SLF4J 2 * Logback + Logback logstash * GRPC - * [Ecosystem](https://github.com/grpc-ecosystem/grpc-spring) + * Spring GRPC * [Logbook](https://github.com/zalando/logbook) Supported web technologies are: diff --git a/azure/README.md b/azure/README.md index 47ca9b85..11ad0770 100644 --- a/azure/README.md +++ b/azure/README.md @@ -208,24 +208,24 @@ and ```xml no.entur.logging.cloud - spring-boot-starter-azure-grpc-ecosystem + spring-boot-starter-azure-grpc-spring ${cloud-logging.version} no.entur.logging.cloud - spring-boot-starter-azure-grpc-ecosystem-test + spring-boot-starter-azure-grpc-spring-test ${cloud-logging.version} test no.entur.logging.cloud - request-response-spring-boot-starter-azure-grpc-ecosystem + request-response-spring-boot-starter-azure-grpc-spring ${cloud-logging.version} no.entur.logging.cloud - request-response-spring-boot-starter-azure-grpc-ecosystem-test + request-response-spring-boot-starter-azure-grpc-spring-test ${cloud-logging.version} test @@ -285,11 +285,11 @@ ext { add ```groovy -implementation("no.entur.logging.cloud:spring-boot-starter-azure-grpc-ecosystem:${cloudLoggingVersion}") -testImplementation("no.entur.logging.cloud:spring-boot-starter-azure-grpc-ecosystem-test:${cloudLoggingVersion}") +implementation("no.entur.logging.cloud:spring-boot-starter-azure-grpc-spring:${cloudLoggingVersion}") +testImplementation("no.entur.logging.cloud:spring-boot-starter-azure-grpc-spring-test:${cloudLoggingVersion}") // requst-response logging -implementation("no.entur.logging.cloud:request-response-spring-boot-starter-azure-grpc-ecosystem:${cloudLoggingVersion}") -testImplementation("no.entur.logging.cloud:request-response-spring-boot-starter-azure-grpc-ecosystem-test:${cloudLoggingVersion}") +implementation("no.entur.logging.cloud:request-response-spring-boot-starter-azure-grpc-spring:${cloudLoggingVersion}") +testImplementation("no.entur.logging.cloud:request-response-spring-boot-starter-azure-grpc-spring-test:${cloudLoggingVersion}") // on-demand logging support implementation("no.entur.logging.cloud:on-demand-spring-boot-starter-grpc:${cloudLoggingVersion}") // metrics diff --git a/azure/logback-logstash-encoder-azure/build.gradle b/azure/logback-logstash-encoder-azure/build.gradle index 135179b7..7f4e5b78 100644 --- a/azure/logback-logstash-encoder-azure/build.gradle +++ b/azure/logback-logstash-encoder-azure/build.gradle @@ -7,7 +7,7 @@ dependencies { api ("ch.qos.logback:logback-core") api ("net.logstash.logback:logstash-logback-encoder:${logbackLogstashVersion}") - api("com.fasterxml.jackson.core:jackson-core") + api("tools.jackson.core:jackson-core") } diff --git a/azure/logback-logstash-encoder-azure/src/main/java/no/entur/logging/cloud/azure/logback/logstash/AzureServiceContextJsonProvider.java b/azure/logback-logstash-encoder-azure/src/main/java/no/entur/logging/cloud/azure/logback/logstash/AzureServiceContextJsonProvider.java index e223c086..d973005c 100644 --- a/azure/logback-logstash-encoder-azure/src/main/java/no/entur/logging/cloud/azure/logback/logstash/AzureServiceContextJsonProvider.java +++ b/azure/logback-logstash-encoder-azure/src/main/java/no/entur/logging/cloud/azure/logback/logstash/AzureServiceContextJsonProvider.java @@ -1,7 +1,7 @@ package no.entur.logging.cloud.azure.logback.logstash; import ch.qos.logback.classic.spi.ILoggingEvent; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import net.logstash.logback.composite.AbstractFieldJsonProvider; import net.logstash.logback.composite.FieldNamesAware; import net.logstash.logback.composite.JsonWritingUtils; @@ -76,9 +76,9 @@ public static String parseServiceNameFromHostname(String host) { } @Override - public void writeTo(JsonGenerator generator, ILoggingEvent event) throws IOException { + public void writeTo(JsonGenerator generator, ILoggingEvent event) { if(service != null) { - generator.writeObjectFieldStart(getFieldName()); + generator.writeObjectPropertyStart(getFieldName()); JsonWritingUtils.writeStringField(generator, "service", service); diff --git a/azure/micrometer-azure/src/main/java/no/entur/logging/cloud/azure/micrometer/AzureLogbackMetrics.java b/azure/micrometer-azure/src/main/java/no/entur/logging/cloud/azure/micrometer/AzureLogbackMetrics.java index 02b0062a..35a46ca6 100644 --- a/azure/micrometer-azure/src/main/java/no/entur/logging/cloud/azure/micrometer/AzureLogbackMetrics.java +++ b/azure/micrometer-azure/src/main/java/no/entur/logging/cloud/azure/micrometer/AzureLogbackMetrics.java @@ -2,8 +2,6 @@ import ch.qos.logback.classic.LoggerContext; import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.lang.NonNullApi; -import io.micrometer.core.lang.NonNullFields; import org.slf4j.LoggerFactory; import java.util.Map; @@ -15,8 +13,6 @@ * Logback driver with extra log levels. Originally copied from LogbackMetrics class in micrometer-core. * */ -@NonNullApi -@NonNullFields public class AzureLogbackMetrics extends io.micrometer.core.instrument.binder.logging.LogbackMetrics { // extend since there is not interface type private final LoggerContext loggerContext; private final Map metricsTurboFilters = new ConcurrentHashMap<>(); diff --git a/azure/micrometer-azure/src/main/java/no/entur/logging/cloud/azure/micrometer/AzureMetricsTurboFilter.java b/azure/micrometer-azure/src/main/java/no/entur/logging/cloud/azure/micrometer/AzureMetricsTurboFilter.java index 23754818..4e99a946 100644 --- a/azure/micrometer-azure/src/main/java/no/entur/logging/cloud/azure/micrometer/AzureMetricsTurboFilter.java +++ b/azure/micrometer-azure/src/main/java/no/entur/logging/cloud/azure/micrometer/AzureMetricsTurboFilter.java @@ -8,8 +8,6 @@ import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Tag; -import io.micrometer.core.lang.NonNullApi; -import io.micrometer.core.lang.NonNullFields; import no.entur.logging.cloud.api.DevOpsLevel; import no.entur.logging.cloud.api.DevOpsMarker; import org.slf4j.Marker; @@ -18,8 +16,6 @@ import java.util.List; -@NonNullApi -@NonNullFields public class AzureMetricsTurboFilter extends TurboFilter implements LoggingEventMetrics { private final Counter alertCounter; diff --git a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem-test/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/azure/request-response-spring-boot-starter-azure-grpc-ecosystem-test/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 7f3a8e4f..00000000 --- a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem-test/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -no.entur.logging.cloud.azure.spring.grpc.ecosystem.test.RequestResponseAzureGrpcEcosystemTestAutoConfiguration \ No newline at end of file diff --git a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem/README.md b/azure/request-response-spring-boot-starter-azure-grpc-ecosystem/README.md deleted file mode 100644 index f56a700b..00000000 --- a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem/README.md +++ /dev/null @@ -1 +0,0 @@ -# request-response-logging for GCP + Ecosystem diff --git a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/azure/request-response-spring-boot-starter-azure-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index af355280..00000000 --- a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -no.entur.logging.cloud.azure.spring.grpc.ecosystem.RequestResponseAzureGrpcEcosystemAutoConfiguration \ No newline at end of file diff --git a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem-test/build.gradle b/azure/request-response-spring-boot-starter-azure-grpc-spring-test/build.gradle similarity index 78% rename from azure/request-response-spring-boot-starter-azure-grpc-ecosystem-test/build.gradle rename to azure/request-response-spring-boot-starter-azure-grpc-spring-test/build.gradle index 3bf783b8..94b7e3f6 100644 --- a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem-test/build.gradle +++ b/azure/request-response-spring-boot-starter-azure-grpc-spring-test/build.gradle @@ -1,14 +1,14 @@ dependencies { api project(":azure:spring-boot-autoconfigure-azure-test") - api project(':azure:request-response-spring-boot-starter-azure-grpc-ecosystem') - api project(':request-response:request-response-spring-boot-autoconfigure-grpc-ecosystem') + api project(':azure:request-response-spring-boot-starter-azure-grpc-spring') + api project(':request-response:request-response-spring-boot-autoconfigure-grpc-spring') - api ("org.entur.jackson:jackson-syntax-highlight:${jacksonSyntaxHighlightVersion}") + api ("org.entur.jackson:jackson-tools-syntax-highlight:${jacksonSyntaxHighlightVersion}") api ("org.entur.logback-logstash-syntax-highlighting-decorators:logback-logstash-syntax-highlighting-decorators:${logbackLogstashSyntaxHighlightingDecoratorsVersion}") api ("net.logstash.logback:logstash-logback-encoder:${logbackLogstashVersion}") - api ("com.fasterxml.jackson.core:jackson-core") + api ("tools.jackson.core:jackson-core") api("org.slf4j:slf4j-api") api("org.springframework.boot:spring-boot-autoconfigure") diff --git a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/src/main/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/ecosystem/test/RequestResponseGcpGrpcEcosystemTestAutoConfiguration.java b/azure/request-response-spring-boot-starter-azure-grpc-spring-test/src/main/java/no/entur/logging/cloud/azure/spring/grpc/spring/test/RequestResponseAzureGrpcSpringTestAutoConfiguration.java similarity index 81% rename from gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/src/main/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/ecosystem/test/RequestResponseGcpGrpcEcosystemTestAutoConfiguration.java rename to azure/request-response-spring-boot-starter-azure-grpc-spring-test/src/main/java/no/entur/logging/cloud/azure/spring/grpc/spring/test/RequestResponseAzureGrpcSpringTestAutoConfiguration.java index cc179b39..4bcf9b29 100644 --- a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/src/main/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/ecosystem/test/RequestResponseGcpGrpcEcosystemTestAutoConfiguration.java +++ b/azure/request-response-spring-boot-starter-azure-grpc-spring-test/src/main/java/no/entur/logging/cloud/azure/spring/grpc/spring/test/RequestResponseAzureGrpcSpringTestAutoConfiguration.java @@ -1,13 +1,13 @@ -package no.entur.logging.cloud.gcp.spring.gcp.grpc.ecosystem.test; +package no.entur.logging.cloud.azure.spring.grpc.spring.test; -import no.entur.logging.cloud.gcp.spring.gcp.grpc.ecosystem.RequestResponseGcpGrpcEcosystemAutoConfiguration; +import no.entur.logging.cloud.azure.spring.grpc.spring.RequestResponseAzureGrpcSpringAutoConfiguration; import no.entur.logging.cloud.spring.rr.grpc.AbstractRequestResponseGrpcSinkAutoConfiguration; -import org.entur.jackson.jsh.AnsiSyntaxHighlight; -import org.entur.jackson.jsh.DefaultSyntaxHighlighter; import no.entur.logging.cloud.rr.grpc.GrpcSink; import no.entur.logging.cloud.rr.grpc.test.CompositeSink; import no.entur.logging.cloud.rr.grpc.test.PrettyPrintingLogLevelLogstashLogbackGrpcSink; import no.entur.logging.cloud.rr.grpc.test.PrettyPrintingGrpcSink; +import org.entur.jackson.tools.jsh.AnsiSyntaxHighlight; +import org.entur.jackson.tools.jsh.DefaultSyntaxHighlighter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.event.Level; @@ -17,11 +17,11 @@ import org.springframework.context.annotation.Configuration; @AutoConfigureBefore(value = { - RequestResponseGcpGrpcEcosystemAutoConfiguration.class, + RequestResponseAzureGrpcSpringAutoConfiguration.class, }) @Configuration -public class RequestResponseGcpGrpcEcosystemTestAutoConfiguration extends AbstractRequestResponseGrpcSinkAutoConfiguration { +public class RequestResponseAzureGrpcSpringTestAutoConfiguration extends AbstractRequestResponseGrpcSinkAutoConfiguration { @Bean @ConditionalOnMissingBean(GrpcSink.class) diff --git a/azure/request-response-spring-boot-starter-azure-grpc-spring-test/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/azure/request-response-spring-boot-starter-azure-grpc-spring-test/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..350ee99f --- /dev/null +++ b/azure/request-response-spring-boot-starter-azure-grpc-spring-test/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +no.entur.logging.cloud.azure.spring.grpc.spring.test.RequestResponseAzureGrpcSpringTestAutoConfiguration \ No newline at end of file diff --git a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem-test/src/test/java/no/entur/logging/cloud/spring/logbook/web/test/DemoApplication.java b/azure/request-response-spring-boot-starter-azure-grpc-spring-test/src/test/java/no/entur/logging/cloud/spring/logbook/web/test/DemoApplication.java similarity index 100% rename from azure/request-response-spring-boot-starter-azure-grpc-ecosystem-test/src/test/java/no/entur/logging/cloud/spring/logbook/web/test/DemoApplication.java rename to azure/request-response-spring-boot-starter-azure-grpc-spring-test/src/test/java/no/entur/logging/cloud/spring/logbook/web/test/DemoApplication.java diff --git a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem-test/src/test/java/no/entur/logging/cloud/spring/logbook/web/test/LoadContextLoggingTest.java b/azure/request-response-spring-boot-starter-azure-grpc-spring-test/src/test/java/no/entur/logging/cloud/spring/logbook/web/test/LoadContextLoggingTest.java similarity index 100% rename from azure/request-response-spring-boot-starter-azure-grpc-ecosystem-test/src/test/java/no/entur/logging/cloud/spring/logbook/web/test/LoadContextLoggingTest.java rename to azure/request-response-spring-boot-starter-azure-grpc-spring-test/src/test/java/no/entur/logging/cloud/spring/logbook/web/test/LoadContextLoggingTest.java diff --git a/azure/request-response-spring-boot-starter-azure-grpc-spring/README.md b/azure/request-response-spring-boot-starter-azure-grpc-spring/README.md new file mode 100644 index 00000000..7ce08656 --- /dev/null +++ b/azure/request-response-spring-boot-starter-azure-grpc-spring/README.md @@ -0,0 +1 @@ +# request-response-logging for GCP + Spring GRPC diff --git a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem/build.gradle b/azure/request-response-spring-boot-starter-azure-grpc-spring/build.gradle similarity index 80% rename from azure/request-response-spring-boot-starter-azure-grpc-ecosystem/build.gradle rename to azure/request-response-spring-boot-starter-azure-grpc-spring/build.gradle index e09c649f..b49c29ba 100644 --- a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem/build.gradle +++ b/azure/request-response-spring-boot-starter-azure-grpc-spring/build.gradle @@ -4,14 +4,14 @@ dependencies { api project(':api') api project(':azure:logback-logstash-encoder-azure') api project(':request-response:netty-grpc') - api project(':request-response:request-response-spring-boot-autoconfigure-grpc-ecosystem') + api project(':request-response:request-response-spring-boot-autoconfigure-grpc-spring') api ("org.slf4j:slf4j-api") api ("org.springframework.boot:spring-boot-starter") api ("org.springframework.boot:spring-boot-autoconfigure") api ("org.springframework.boot:spring-boot-starter-logging") - api("net.devh:grpc-server-spring-boot-starter:${ecosystemGrpcVersion}") + api("org.springframework.grpc:spring-grpc-server-spring-boot-starter:${springGrpcVersion}") testImplementation("org.springframework.boot:spring-boot-starter-test") } diff --git a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem/src/main/java/no/entur/logging/cloud/azure/spring/grpc/ecosystem/RequestResponseAzureGrpcEcosystemAutoConfiguration.java b/azure/request-response-spring-boot-starter-azure-grpc-spring/src/main/java/no/entur/logging/cloud/azure/spring/grpc/spring/RequestResponseAzureGrpcSpringAutoConfiguration.java similarity index 65% rename from azure/request-response-spring-boot-starter-azure-grpc-ecosystem/src/main/java/no/entur/logging/cloud/azure/spring/grpc/ecosystem/RequestResponseAzureGrpcEcosystemAutoConfiguration.java rename to azure/request-response-spring-boot-starter-azure-grpc-spring/src/main/java/no/entur/logging/cloud/azure/spring/grpc/spring/RequestResponseAzureGrpcSpringAutoConfiguration.java index 1e961e57..8ddd4a63 100644 --- a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem/src/main/java/no/entur/logging/cloud/azure/spring/grpc/ecosystem/RequestResponseAzureGrpcEcosystemAutoConfiguration.java +++ b/azure/request-response-spring-boot-starter-azure-grpc-spring/src/main/java/no/entur/logging/cloud/azure/spring/grpc/spring/RequestResponseAzureGrpcSpringAutoConfiguration.java @@ -1,17 +1,14 @@ -package no.entur.logging.cloud.azure.spring.grpc.ecosystem; +package no.entur.logging.cloud.azure.spring.grpc.spring; -import no.entur.logging.cloud.spring.grpc.ecosystem.RequestResponseGrpcEcosystemAutoConfiguration; -import no.entur.logging.cloud.spring.rr.grpc.AbstractRequestResponseGrpcSinkAutoConfiguration; import no.entur.logging.cloud.spring.rr.grpc.GrpcLoggingCloudProperties; import no.entur.logging.cloud.spring.rr.grpc.RequestResponseGrpcAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; @Configuration @AutoConfigureBefore(RequestResponseGrpcAutoConfiguration.class) -public class RequestResponseAzureGrpcEcosystemAutoConfiguration { +public class RequestResponseAzureGrpcSpringAutoConfiguration { @Bean public GrpcLoggingCloudProperties grpcLoggingCloudProperties() { diff --git a/azure/request-response-spring-boot-starter-azure-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/azure/request-response-spring-boot-starter-azure-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..d24dd5d6 --- /dev/null +++ b/azure/request-response-spring-boot-starter-azure-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +no.entur.logging.cloud.azure.spring.grpc.spring.RequestResponseAzureGrpcSpringAutoConfiguration \ No newline at end of file diff --git a/azure/spring-boot-autoconfigure-azure-test/build.gradle b/azure/spring-boot-autoconfigure-azure-test/build.gradle index 18406e31..9181cfab 100644 --- a/azure/spring-boot-autoconfigure-azure-test/build.gradle +++ b/azure/spring-boot-autoconfigure-azure-test/build.gradle @@ -15,7 +15,7 @@ dependencies { api("org.springframework.boot:spring-boot-starter-logging") api("org.springframework.boot:spring-boot-autoconfigure") - api ("org.entur.jackson:jackson-syntax-highlight:${jacksonSyntaxHighlightVersion}") + api ("org.entur.jackson:jackson-tools-syntax-highlight:${jacksonSyntaxHighlightVersion}") api ("org.entur.logback-logstash-syntax-highlighting-decorators:logback-logstash-syntax-highlighting-decorators:${logbackLogstashSyntaxHighlightingDecoratorsVersion}") annotationProcessor "org.springframework.boot:spring-boot-configuration-processor:${springBootVersion}" diff --git a/azure/spring-boot-autoconfigure-azure-test/src/main/java/no/entur/logging/cloud/azure/spring/test/LogSeveritySyntaxHighlighter.java b/azure/spring-boot-autoconfigure-azure-test/src/main/java/no/entur/logging/cloud/azure/spring/test/LogSeveritySyntaxHighlighter.java index f11ad834..0e8d6667 100644 --- a/azure/spring-boot-autoconfigure-azure-test/src/main/java/no/entur/logging/cloud/azure/spring/test/LogSeveritySyntaxHighlighter.java +++ b/azure/spring-boot-autoconfigure-azure-test/src/main/java/no/entur/logging/cloud/azure/spring/test/LogSeveritySyntaxHighlighter.java @@ -1,8 +1,8 @@ package no.entur.logging.cloud.azure.spring.test; import org.entur.decorators.syntaxhighlight.DelegateSyntaxHighlighter; -import org.entur.jackson.jsh.AnsiSyntaxHighlight; -import org.entur.jackson.jsh.SyntaxHighlighter; +import org.entur.jackson.tools.jsh.AnsiSyntaxHighlight; +import org.entur.jackson.tools.jsh.SyntaxHighlighter; public class LogSeveritySyntaxHighlighter extends DelegateSyntaxHighlighter { diff --git a/azure/spring-boot-autoconfigure-azure-test/src/main/java/no/entur/logging/cloud/azure/spring/test/LogSeveritySyntaxHighlighterFactory.java b/azure/spring-boot-autoconfigure-azure-test/src/main/java/no/entur/logging/cloud/azure/spring/test/LogSeveritySyntaxHighlighterFactory.java index 288ee94c..88f5542c 100644 --- a/azure/spring-boot-autoconfigure-azure-test/src/main/java/no/entur/logging/cloud/azure/spring/test/LogSeveritySyntaxHighlighterFactory.java +++ b/azure/spring-boot-autoconfigure-azure-test/src/main/java/no/entur/logging/cloud/azure/spring/test/LogSeveritySyntaxHighlighterFactory.java @@ -1,10 +1,10 @@ package no.entur.logging.cloud.azure.spring.test; -import com.fasterxml.jackson.core.JsonGenerator; +import org.entur.jackson.tools.jsh.AnsiSyntaxHighlight; +import org.entur.jackson.tools.jsh.DefaultSyntaxHighlighter; +import org.entur.jackson.tools.jsh.SyntaxHighlighter; +import tools.jackson.core.JsonGenerator; import org.entur.decorators.factory.ConfigurableSyntaxHighlighterFactory; -import org.entur.jackson.jsh.AnsiSyntaxHighlight; -import org.entur.jackson.jsh.DefaultSyntaxHighlighter; -import org.entur.jackson.jsh.SyntaxHighlighter; public class LogSeveritySyntaxHighlighterFactory extends ConfigurableSyntaxHighlighterFactory { @@ -50,9 +50,9 @@ public LogSeveritySyntaxHighlighterFactory() { } @Override - public SyntaxHighlighter createSyntaxHighlighter(JsonGenerator generator) { + public SyntaxHighlighter createSyntaxHighlighter() { if(cachedSyntaxHighlighter == null) { - cachedSyntaxHighlighter = super.createSyntaxHighlighter(generator); + cachedSyntaxHighlighter = super.createSyntaxHighlighter(); } return new LogSeveritySyntaxHighlighter(cachedSyntaxHighlighter, severity.defaultValue, severity.debug, severity.info, severity.warning, severity.error, loggerName, message); } diff --git a/azure/spring-boot-autoconfigure-azure-test/src/main/resources/logback/logback-spring-test.xml b/azure/spring-boot-autoconfigure-azure-test/src/main/resources/logback/logback-spring-test.xml index 195a00a3..18e1aab6 100644 --- a/azure/spring-boot-autoconfigure-azure-test/src/main/resources/logback/logback-spring-test.xml +++ b/azure/spring-boot-autoconfigure-azure-test/src/main/resources/logback/logback-spring-test.xml @@ -55,7 +55,7 @@ TODO this seems to add an extract space after the last newline, but as this is just the human readable format, this is not important. --> - + green @@ -63,7 +63,8 @@ blue magenta - + + diff --git a/azure/spring-boot-starter-azure-grpc-ecosystem/src/main/java/no/entur/logging/cloud/azure/spring/grpc/ecosystem/EcosystemGrpcLoggingAutoConfiguration.java b/azure/spring-boot-starter-azure-grpc-ecosystem/src/main/java/no/entur/logging/cloud/azure/spring/grpc/ecosystem/EcosystemGrpcLoggingAutoConfiguration.java deleted file mode 100644 index 82bd3937..00000000 --- a/azure/spring-boot-starter-azure-grpc-ecosystem/src/main/java/no/entur/logging/cloud/azure/spring/grpc/ecosystem/EcosystemGrpcLoggingAutoConfiguration.java +++ /dev/null @@ -1,10 +0,0 @@ -package no.entur.logging.cloud.azure.spring.grpc.ecosystem; - -import org.springframework.context.annotation.Configuration; - -@Configuration -public class EcosystemGrpcLoggingAutoConfiguration { - - // error handlers - -} diff --git a/azure/spring-boot-starter-azure-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/azure/spring-boot-starter-azure-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 406825cc..00000000 --- a/azure/spring-boot-starter-azure-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -no.entur.logging.cloud.azure.spring.grpc.ecosystem.EcosystemGrpcLoggingAutoConfiguration \ No newline at end of file diff --git a/azure/spring-boot-starter-azure-grpc-ecosystem-test/build.gradle b/azure/spring-boot-starter-azure-grpc-spring-test/build.gradle similarity index 100% rename from azure/spring-boot-starter-azure-grpc-ecosystem-test/build.gradle rename to azure/spring-boot-starter-azure-grpc-spring-test/build.gradle diff --git a/azure/spring-boot-starter-azure-grpc-ecosystem/build.gradle b/azure/spring-boot-starter-azure-grpc-spring/build.gradle similarity index 89% rename from azure/spring-boot-starter-azure-grpc-ecosystem/build.gradle rename to azure/spring-boot-starter-azure-grpc-spring/build.gradle index a0602534..1a3a8ca4 100644 --- a/azure/spring-boot-starter-azure-grpc-ecosystem/build.gradle +++ b/azure/spring-boot-starter-azure-grpc-spring/build.gradle @@ -17,7 +17,7 @@ dependencies { api("org.springframework.boot:spring-boot-autoconfigure") api("org.springframework.boot:spring-boot-starter-logging") - api("net.devh:grpc-server-spring-boot-starter:${ecosystemGrpcVersion}") + api("org.springframework.grpc:spring-grpc-server-spring-boot-starter:${springGrpcVersion}") api "io.grpc:grpc-netty:${grpcNettyVersion}" diff --git a/azure/spring-boot-starter-azure-grpc-spring/src/main/java/no/entur/logging/cloud/azure/spring/grpc/spring/SpringGrpcLoggingAutoConfiguration.java b/azure/spring-boot-starter-azure-grpc-spring/src/main/java/no/entur/logging/cloud/azure/spring/grpc/spring/SpringGrpcLoggingAutoConfiguration.java new file mode 100644 index 00000000..52e6cf2d --- /dev/null +++ b/azure/spring-boot-starter-azure-grpc-spring/src/main/java/no/entur/logging/cloud/azure/spring/grpc/spring/SpringGrpcLoggingAutoConfiguration.java @@ -0,0 +1,10 @@ +package no.entur.logging.cloud.azure.spring.grpc.spring; + +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SpringGrpcLoggingAutoConfiguration { + + // error handlers + +} diff --git a/azure/spring-boot-starter-azure-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/azure/spring-boot-starter-azure-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..f112fc89 --- /dev/null +++ b/azure/spring-boot-starter-azure-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +no.entur.logging.cloud.azure.spring.grpc.spring.SpringGrpcLoggingAutoConfiguration \ No newline at end of file diff --git a/build.gradle b/build.gradle index 1d27b209..d0626ffa 100644 --- a/build.gradle +++ b/build.gradle @@ -7,19 +7,19 @@ plugins { // Define version variables at root level so they're available everywhere ext { - springBootVersion = '3.5.9' // https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/ + springBootVersion = '4.0.2' // https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/ // The following versions are managed by Spring Boot BOM (no need to define here): // junitJupiterVersion, mockitoVersion, slf4jVersion, logbackVersion, // jacksonVersion, jacksonDatabindVersion, micrometerVersion, janinoVersion, // servletVersion (jakarta-servlet), annotationApiVersion (jakarta-annotation), // nettyVersion, jsonPathVersion - + // Versions NOT in Spring Boot BOM - we manage these ourselves: googleTruthVersion = '1.4.5' - logbackLogstashVersion = '8.1' - logbookVersion = '3.12.3' - jacksonSyntaxHighlightVersion = '1.1.1' - logbackLogstashSyntaxHighlightingDecoratorsVersion = '1.1.1' + logbackLogstashVersion = '9.0' + logbookVersion = '4.0.0-RC.1' + jacksonSyntaxHighlightVersion = '2.0.0' + logbackLogstashSyntaxHighlightingDecoratorsVersion = '2.0.0' commonsIoVersion = '2.21.0' commonsTextVersion = '1.15.0' nettyTcnativeBoringsslStaticVersion = '2.0.74.Final' @@ -28,7 +28,7 @@ ext { grpcVersion = '1.78.0' grpcCommonsVersion = '2.65.0' grpcProtobufVersion = '4.33.4' - ecosystemGrpcVersion = '3.1.0.RELEASE' + springGrpcVersion = '1.0.2' jsonAssertVersion = '0.8.0' } @@ -61,7 +61,7 @@ configure(exampleProjects()) { java { toolchain { - languageVersion = JavaLanguageVersion.of(17) // Specify desired Java version (e.g., Java 17) + languageVersion = JavaLanguageVersion.of(25) // Specify desired Java version (e.g., Java 17) } } @@ -92,7 +92,7 @@ configure(jvmProjects()) { test { useJUnitPlatform { - includeEngines 'junit-jupiter', 'junit-vintage' + includeEngines 'junit-jupiter' } } diff --git a/examples/README.md b/examples/README.md index ef618a5e..539ba5b1 100644 --- a/examples/README.md +++ b/examples/README.md @@ -12,7 +12,7 @@ Please note: * For local development, a shortened 'classic' one-line is the default * To examine log statements in more details use `CompositeConsoleOutputControl.useHumanReadableJsonEncoder()` for JSON output -# Ecosystem gRPC interceptors +# Spring gRPC interceptors The gRPC interceptor order overview: ## Service configuration @@ -30,7 +30,7 @@ The gRPC interceptor order overview: // Validation MyValidationServerInterceptor.class, -}, sortInterceptors = true) +}) ``` ## Interceptor order diff --git a/examples/gcp-grpc-ecosystem-example/README.md b/examples/azure-grpc-spring-example/README.md similarity index 64% rename from examples/gcp-grpc-ecosystem-example/README.md rename to examples/azure-grpc-spring-example/README.md index 39ab8c06..86c822be 100644 --- a/examples/gcp-grpc-ecosystem-example/README.md +++ b/examples/azure-grpc-spring-example/README.md @@ -1,4 +1,4 @@ -# gcp-grpc-ecosystem-example +# azure-grpc-spring-example Simple gRPC server example with a few unit tests. diff --git a/examples/azure-grpc-ecosystem-example/build.gradle b/examples/azure-grpc-spring-example/build.gradle similarity index 89% rename from examples/azure-grpc-ecosystem-example/build.gradle rename to examples/azure-grpc-spring-example/build.gradle index 3e139466..5f896509 100644 --- a/examples/azure-grpc-ecosystem-example/build.gradle +++ b/examples/azure-grpc-spring-example/build.gradle @@ -1,21 +1,21 @@ plugins { - id 'org.springframework.boot' version '3.5.7' + id 'org.springframework.boot' version '4.0.1' id "com.google.protobuf" version "0.9.6" } test { useJUnitPlatform { - includeEngines 'junit-jupiter', 'junit-vintage' + includeEngines 'junit-jupiter' } } dependencies { implementation project(':on-demand:on-demand-spring-boot-starter-grpc') - implementation project(':azure:spring-boot-starter-azure-grpc-ecosystem') - implementation project(':azure:request-response-spring-boot-starter-azure-grpc-ecosystem') + implementation project(':azure:spring-boot-starter-azure-grpc-spring') + implementation project(':azure:request-response-spring-boot-starter-azure-grpc-spring') implementation project(':trace:server:correlation-id-trace-grpc-netty') implementation project(':trace:mdc-context-grpc-netty') - implementation project(':request-response:request-response-spring-boot-autoconfigure-grpc-ecosystem') + implementation project(':request-response:request-response-spring-boot-autoconfigure-grpc-spring') implementation("io.grpc:grpc-api:$grpcVersion") implementation("io.grpc:grpc-core:$grpcVersion") @@ -31,8 +31,8 @@ dependencies { // added due to grpc plugin dependency resolution problem testImplementation "org.junit.platform:junit-platform-launcher" - testImplementation project(":azure:spring-boot-starter-azure-grpc-ecosystem-test") - testImplementation project(':azure:request-response-spring-boot-starter-azure-grpc-ecosystem-test') + testImplementation project(":azure:spring-boot-starter-azure-grpc-spring-test") + testImplementation project(':azure:request-response-spring-boot-starter-azure-grpc-spring-test') testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation project(":test:test-logback-junit") diff --git a/examples/azure-grpc-ecosystem-example/src/main/java/no/entur/grpc/azure/example/AbstractGreetingController.java b/examples/azure-grpc-spring-example/src/main/java/no/entur/grpc/azure/example/AbstractGreetingController.java similarity index 100% rename from examples/azure-grpc-ecosystem-example/src/main/java/no/entur/grpc/azure/example/AbstractGreetingController.java rename to examples/azure-grpc-spring-example/src/main/java/no/entur/grpc/azure/example/AbstractGreetingController.java diff --git a/examples/azure-grpc-ecosystem-example/src/main/java/no/entur/grpc/azure/example/DemoApplication.java b/examples/azure-grpc-spring-example/src/main/java/no/entur/grpc/azure/example/DemoApplication.java similarity index 100% rename from examples/azure-grpc-ecosystem-example/src/main/java/no/entur/grpc/azure/example/DemoApplication.java rename to examples/azure-grpc-spring-example/src/main/java/no/entur/grpc/azure/example/DemoApplication.java diff --git a/examples/azure-grpc-ecosystem-example/src/main/java/no/entur/grpc/azure/example/GreetingController.java b/examples/azure-grpc-spring-example/src/main/java/no/entur/grpc/azure/example/GreetingController.java similarity index 91% rename from examples/azure-grpc-ecosystem-example/src/main/java/no/entur/grpc/azure/example/GreetingController.java rename to examples/azure-grpc-spring-example/src/main/java/no/entur/grpc/azure/example/GreetingController.java index 43c5d868..e87cd60a 100644 --- a/examples/azure-grpc-ecosystem-example/src/main/java/no/entur/grpc/azure/example/GreetingController.java +++ b/examples/azure-grpc-spring-example/src/main/java/no/entur/grpc/azure/example/GreetingController.java @@ -1,11 +1,11 @@ package no.entur.grpc.azure.example; -import net.devh.boot.grpc.server.service.GrpcService; import no.entur.logging.cloud.spring.rr.grpc.OrderedGrpcLoggingServerInterceptor; import no.entur.logging.cloud.spring.rr.grpc.RequestResponseGrpcExceptionHandlerInterceptor; import no.entur.logging.cloud.trace.spring.grpc.interceptor.OrderedCorrelationIdGrpcMdcContextServerInterceptor; import org.springframework.context.annotation.Profile; +import org.springframework.grpc.server.service.GrpcService; // note: order is reversed compared to lognet @GrpcService(interceptors = { @@ -19,7 +19,7 @@ // Validation MyValidationServerInterceptor.class, -}, sortInterceptors = true) +}) @Profile("!ondemand") public class GreetingController extends AbstractGreetingController { diff --git a/examples/azure-grpc-ecosystem-example/src/main/java/no/entur/grpc/azure/example/GreetingControllerWithOnDemandLogging.java b/examples/azure-grpc-spring-example/src/main/java/no/entur/grpc/azure/example/GreetingControllerWithOnDemandLogging.java similarity index 92% rename from examples/azure-grpc-ecosystem-example/src/main/java/no/entur/grpc/azure/example/GreetingControllerWithOnDemandLogging.java rename to examples/azure-grpc-spring-example/src/main/java/no/entur/grpc/azure/example/GreetingControllerWithOnDemandLogging.java index 8bb2b429..497b0ade 100644 --- a/examples/azure-grpc-ecosystem-example/src/main/java/no/entur/grpc/azure/example/GreetingControllerWithOnDemandLogging.java +++ b/examples/azure-grpc-spring-example/src/main/java/no/entur/grpc/azure/example/GreetingControllerWithOnDemandLogging.java @@ -1,12 +1,13 @@ package no.entur.grpc.azure.example; -import net.devh.boot.grpc.server.service.GrpcService; + import no.entur.logging.cloud.spring.ondemand.grpc.scope.GrpcLoggingScopeContextInterceptor; import no.entur.logging.cloud.spring.rr.grpc.OrderedGrpcLoggingServerInterceptor; import no.entur.logging.cloud.spring.rr.grpc.RequestResponseGrpcExceptionHandlerInterceptor; import no.entur.logging.cloud.trace.spring.grpc.interceptor.OrderedCorrelationIdGrpcMdcContextServerInterceptor; import org.springframework.context.annotation.Profile; +import org.springframework.grpc.server.service.GrpcService; @Profile("ondemand") @GrpcService(interceptors = { @@ -20,7 +21,7 @@ // Validation MyValidationServerInterceptor.class, -}, sortInterceptors = true) +}) public class GreetingControllerWithOnDemandLogging extends AbstractGreetingController { } \ No newline at end of file diff --git a/examples/azure-grpc-ecosystem-example/src/main/java/no/entur/grpc/azure/example/MyGrpcConfig.java b/examples/azure-grpc-spring-example/src/main/java/no/entur/grpc/azure/example/MyGrpcConfig.java similarity index 100% rename from examples/azure-grpc-ecosystem-example/src/main/java/no/entur/grpc/azure/example/MyGrpcConfig.java rename to examples/azure-grpc-spring-example/src/main/java/no/entur/grpc/azure/example/MyGrpcConfig.java diff --git a/examples/azure-grpc-ecosystem-example/src/main/java/no/entur/grpc/azure/example/MyValidationServerInterceptor.java b/examples/azure-grpc-spring-example/src/main/java/no/entur/grpc/azure/example/MyValidationServerInterceptor.java similarity index 100% rename from examples/azure-grpc-ecosystem-example/src/main/java/no/entur/grpc/azure/example/MyValidationServerInterceptor.java rename to examples/azure-grpc-spring-example/src/main/java/no/entur/grpc/azure/example/MyValidationServerInterceptor.java diff --git a/examples/azure-grpc-ecosystem-example/src/main/proto/greeting_message.proto b/examples/azure-grpc-spring-example/src/main/proto/greeting_message.proto similarity index 100% rename from examples/azure-grpc-ecosystem-example/src/main/proto/greeting_message.proto rename to examples/azure-grpc-spring-example/src/main/proto/greeting_message.proto diff --git a/examples/azure-grpc-ecosystem-example/src/main/proto/greeting_service.proto b/examples/azure-grpc-spring-example/src/main/proto/greeting_service.proto similarity index 100% rename from examples/azure-grpc-ecosystem-example/src/main/proto/greeting_service.proto rename to examples/azure-grpc-spring-example/src/main/proto/greeting_service.proto diff --git a/examples/azure-grpc-ecosystem-example/src/main/resources/application.properties b/examples/azure-grpc-spring-example/src/main/resources/application.properties similarity index 100% rename from examples/azure-grpc-ecosystem-example/src/main/resources/application.properties rename to examples/azure-grpc-spring-example/src/main/resources/application.properties diff --git a/examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemAbstractGrpcTest.java b/examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringAbstractGrpcTest.java similarity index 93% rename from examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemAbstractGrpcTest.java rename to examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringAbstractGrpcTest.java index 7b99944e..f8373446 100644 --- a/examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemAbstractGrpcTest.java +++ b/examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringAbstractGrpcTest.java @@ -9,7 +9,7 @@ import java.util.concurrent.TimeUnit; -public class EcosystemAbstractGrpcTest { +public class SpringAbstractGrpcTest { // https://github.com/olivere/grpc-demo/blob/master/java-client/src/main/java/com/altf4/grpc/client/ExampleClient.java public static final int MAX_INBOUND_MESSAGE_SIZE = 1 << 20; @@ -23,11 +23,11 @@ public class EcosystemAbstractGrpcTest { protected final int maxOutboundMessageSize; protected final int maxInboundMessageSize; - public EcosystemAbstractGrpcTest() { + public SpringAbstractGrpcTest() { this(MAX_INBOUND_MESSAGE_SIZE, MAX_OUTBOUND_MESSAGE_SIZE); } - public EcosystemAbstractGrpcTest(int maxInboundMessageSize, int maxOutboundMessageSize) { + public SpringAbstractGrpcTest(int maxInboundMessageSize, int maxOutboundMessageSize) { this.maxInboundMessageSize = maxInboundMessageSize; this.maxOutboundMessageSize = maxOutboundMessageSize; } diff --git a/examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemGreetingTest.java b/examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringGreetingTest.java similarity index 99% rename from examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemGreetingTest.java rename to examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringGreetingTest.java index 26f0947e..2e72a964 100644 --- a/examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemGreetingTest.java +++ b/examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringGreetingTest.java @@ -40,7 +40,7 @@ @SpringBootTest @DirtiesContext @CaptureLogStatements(level = DevOpsLevel.DEBUG, value = {"no.entur", "org.entur"}) -public class EcosystemGreetingTest extends EcosystemAbstractGrpcTest { +public class SpringGreetingTest extends SpringAbstractGrpcTest { @Test public void testBlockingRequestsOnSameStub() throws InterruptedException { diff --git a/examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemGrpcLoggingFormatTest.java b/examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringGrpcLoggingFormatTest.java similarity index 95% rename from examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemGrpcLoggingFormatTest.java rename to examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringGrpcLoggingFormatTest.java index 7b739a2a..31280b40 100644 --- a/examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemGrpcLoggingFormatTest.java +++ b/examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringGrpcLoggingFormatTest.java @@ -12,7 +12,7 @@ @SpringBootTest @DirtiesContext -public class EcosystemGrpcLoggingFormatTest extends EcosystemAbstractGrpcTest { +public class SpringGrpcLoggingFormatTest extends SpringAbstractGrpcTest { @Test public void useHumanReadablePlainEncoderTest() throws InterruptedException { diff --git a/examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemOndemandGrpcLoggingFormatTest.java b/examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringOndemandGrpcLoggingFormatTest.java similarity index 94% rename from examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemOndemandGrpcLoggingFormatTest.java rename to examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringOndemandGrpcLoggingFormatTest.java index 1bb59f11..463c34bd 100644 --- a/examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemOndemandGrpcLoggingFormatTest.java +++ b/examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringOndemandGrpcLoggingFormatTest.java @@ -16,9 +16,12 @@ @SpringBootTest @ActiveProfiles("ondemand") -@TestPropertySource(properties = {"entur.logging.grpc.ondemand.enabled=true"}) +@TestPropertySource(properties = { + "entur.logging.grpc.ondemand.enabled=true", + "entur.logging.grpc.ondemand.failure.logger.enabled=false", +}) @DirtiesContext -public class EcosystemOndemandGrpcLoggingFormatTest extends EcosystemAbstractGrpcTest { +public class SpringOndemandGrpcLoggingFormatTest extends SpringAbstractGrpcTest { @Test public void useHumanReadablePlainEncoderExpectFullLogging() { diff --git a/examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemOndemandGrpcLoggingHighLogLevelTest.java b/examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringOndemandGrpcLoggingHighLogLevelTest.java similarity index 95% rename from examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemOndemandGrpcLoggingHighLogLevelTest.java rename to examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringOndemandGrpcLoggingHighLogLevelTest.java index 82b92c36..02dbc652 100644 --- a/examples/azure-grpc-ecosystem-example/src/test/java/no/entur/grpc/azure/example/EcosystemOndemandGrpcLoggingHighLogLevelTest.java +++ b/examples/azure-grpc-spring-example/src/test/java/no/entur/grpc/azure/example/SpringOndemandGrpcLoggingHighLogLevelTest.java @@ -26,7 +26,7 @@ "entur.logging.http.ondemand.failure.logger.level=error", }) @DirtiesContext -public class EcosystemOndemandGrpcLoggingHighLogLevelTest extends EcosystemAbstractGrpcTest { +public class SpringOndemandGrpcLoggingHighLogLevelTest extends SpringAbstractGrpcTest { @Test public void useHumanReadablePlainEncoderExpectFullLogging() throws InterruptedException { diff --git a/examples/azure-web-example/build.gradle b/examples/azure-web-example/build.gradle index 0c56158c..4e45bf91 100644 --- a/examples/azure-web-example/build.gradle +++ b/examples/azure-web-example/build.gradle @@ -1,10 +1,10 @@ plugins { - id 'org.springframework.boot' version '3.5.7' + id 'org.springframework.boot' version '4.0.1' } test { useJUnitPlatform { - includeEngines 'junit-jupiter', 'junit-vintage' + includeEngines 'junit-jupiter' } } @@ -20,6 +20,8 @@ dependencies { testImplementation project(":azure:request-response-spring-boot-starter-azure-web-test"); testImplementation("org.springframework.boot:spring-boot-starter-test") + testImplementation("org.springframework.boot:spring-boot-restclient") + testImplementation("org.springframework.boot:spring-boot-resttestclient") // JUnit Jupiter API and TestEngine implementation testImplementation("org.junit.jupiter:junit-jupiter-api") diff --git a/examples/azure-web-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java b/examples/azure-web-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java index 04a96010..bed6c3b4 100644 --- a/examples/azure-web-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java +++ b/examples/azure-web-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java @@ -12,7 +12,7 @@ public class WebSecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http - .csrf().disable() + .csrf( (c) -> c.disable()) .authorizeHttpRequests((authz) -> authz .anyRequest().permitAll()); return http.build(); diff --git a/examples/azure-web-example/src/main/java/org/entur/example/web/rest/DocumentEndpoint.java b/examples/azure-web-example/src/main/java/org/entur/example/web/rest/DocumentEndpoint.java index afbe8461..4f52f61a 100644 --- a/examples/azure-web-example/src/main/java/org/entur/example/web/rest/DocumentEndpoint.java +++ b/examples/azure-web-example/src/main/java/org/entur/example/web/rest/DocumentEndpoint.java @@ -1,7 +1,6 @@ package org.entur.example.web.rest; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; @@ -12,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import tools.jackson.core.json.JsonFactory; import java.io.ByteArrayOutputStream; import java.io.CharArrayWriter; @@ -69,9 +69,9 @@ ResponseEntity bigResponse() throws IOException { JsonGenerator generator = factory.createGenerator(writer); generator.writeStartObject(); - generator.writeStringField("start", "here"); - generator.writeStringField("longValue", generateLongString(64*1024)); - generator.writeStringField("end", "here"); + generator.writeStringProperty("start", "here"); + generator.writeStringProperty("longValue", generateLongString(192*1024)); + generator.writeStringProperty("end", "here"); generator.writeEndObject(); generator.flush(); diff --git a/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpBadRequestTest.java b/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpBadRequestTest.java index 71fdc556..efd2b550 100644 --- a/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpBadRequestTest.java +++ b/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpBadRequestTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.TestRestTemplate; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -27,6 +28,7 @@ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @TestPropertySource(properties = {"entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.http.statusCode.equalOrHigherThan=400"}) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpBadRequestTest { @LocalServerPort diff --git a/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1Test.java b/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1Test.java index 7ff37660..02a71c3b 100644 --- a/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1Test.java +++ b/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1Test.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -23,6 +24,7 @@ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @TestPropertySource(properties = {"entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.http.statusCode.equalOrHigherThan=400"}) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpNotFound1Test { @LocalServerPort diff --git a/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound2Test.java b/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound2Test.java index bad86893..960caa58 100644 --- a/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound2Test.java +++ b/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound2Test.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -24,6 +25,7 @@ */ @TestPropertySource(properties = {"entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.http.statusCode.equalOrHigherThan=400"}) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpNotFound2Test { @LocalServerPort diff --git a/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelTest.java b/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelTest.java index 6a26c6a4..d7cf5677 100644 --- a/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelTest.java +++ b/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -26,6 +27,7 @@ "entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.logger.level=error", }) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpOkHighLogLevelTest { @LocalServerPort diff --git a/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTest.java b/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTest.java index 9b4d2753..08170873 100644 --- a/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTest.java +++ b/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -18,6 +19,7 @@ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @TestPropertySource(properties = {"entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.http.statusCode.equalOrHigherThan=400"}) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpOkTest { @LocalServerPort diff --git a/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTroubleshootingTest.java b/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTroubleshootingTest.java index e88a317d..92363f9e 100644 --- a/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTroubleshootingTest.java +++ b/examples/azure-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTroubleshootingTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.*; import org.springframework.test.context.TestPropertySource; @@ -21,6 +22,7 @@ "entur.logging.http.ondemand.failure.http.statusCode.equalOrHigherThan=400", "entur.logging.http.ondemand.troubleshoot.http.headers[0].name=X-DEBUG" }) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpOkTroubleshootingTest { @LocalServerPort diff --git a/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java b/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java index 5aeef7f4..6b828ab9 100644 --- a/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java +++ b/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java @@ -7,14 +7,16 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class WebLoggingFormatTest { @LocalServerPort diff --git a/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaProfileTest.java b/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaProfileTest.java index 039197e6..554778f4 100644 --- a/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaProfileTest.java +++ b/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaProfileTest.java @@ -6,9 +6,10 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; @@ -24,6 +25,7 @@ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @ActiveProfiles("local") +@AutoConfigureTestRestTemplate public class WebLoggingFormatViaProfileTest { @LocalServerPort diff --git a/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaPropertyTest.java b/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaPropertyTest.java index 59ff0859..b39e7704 100644 --- a/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaPropertyTest.java +++ b/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaPropertyTest.java @@ -3,9 +3,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -17,6 +18,7 @@ @TestPropertySource(properties = { "entur.logging.style=HumanReadableJson", }) +@AutoConfigureTestRestTemplate public class WebLoggingFormatViaPropertyTest { @LocalServerPort diff --git a/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithBigResponsesTest.java b/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithBigResponsesTest.java index b8779881..5ca80c03 100644 --- a/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithBigResponsesTest.java +++ b/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithBigResponsesTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -15,6 +16,7 @@ import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class WebLoggingFormatWithBigResponsesTest { @LocalServerPort diff --git a/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithNewlinesTest.java b/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithNewlinesTest.java index 0e9d7d4f..26503314 100644 --- a/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithNewlinesTest.java +++ b/examples/azure-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithNewlinesTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -15,6 +16,7 @@ import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class WebLoggingFormatWithNewlinesTest { @LocalServerPort diff --git a/examples/gcp-async-web-example/build.gradle b/examples/gcp-async-web-example/build.gradle index 6b27a7f7..7601e610 100644 --- a/examples/gcp-async-web-example/build.gradle +++ b/examples/gcp-async-web-example/build.gradle @@ -1,10 +1,10 @@ plugins { - id 'org.springframework.boot' version '3.5.7' + id 'org.springframework.boot' version '4.0.1' } test { useJUnitPlatform { - includeEngines 'junit-jupiter', 'junit-vintage' + includeEngines 'junit-jupiter' } } @@ -21,6 +21,8 @@ dependencies { testImplementation project(":gcp:request-response-spring-boot-starter-gcp-web-test"); testImplementation("org.springframework.boot:spring-boot-starter-test") + testImplementation("org.springframework.boot:spring-boot-restclient") + testImplementation("org.springframework.boot:spring-boot-resttestclient") // JUnit Jupiter API and TestEngine implementation testImplementation("org.junit.jupiter:junit-jupiter-api") diff --git a/examples/gcp-async-web-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java b/examples/gcp-async-web-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java index 04a96010..bed6c3b4 100644 --- a/examples/gcp-async-web-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java +++ b/examples/gcp-async-web-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java @@ -12,7 +12,7 @@ public class WebSecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http - .csrf().disable() + .csrf( (c) -> c.disable()) .authorizeHttpRequests((authz) -> authz .anyRequest().permitAll()); return http.build(); diff --git a/examples/gcp-async-web-example/src/main/java/org/entur/example/web/rest/AsyncDocumentEndpoint.java b/examples/gcp-async-web-example/src/main/java/org/entur/example/web/rest/AsyncDocumentEndpoint.java index efa45f6a..0532ffc4 100644 --- a/examples/gcp-async-web-example/src/main/java/org/entur/example/web/rest/AsyncDocumentEndpoint.java +++ b/examples/gcp-async-web-example/src/main/java/org/entur/example/web/rest/AsyncDocumentEndpoint.java @@ -1,7 +1,6 @@ package org.entur.example.web.rest; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import no.entur.logging.cloud.spring.ondemand.web.scope.LoggingScopeThreadUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -9,6 +8,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import tools.jackson.core.json.JsonFactory; import java.io.CharArrayWriter; import java.io.IOException; @@ -120,9 +120,9 @@ public CompletableFuture> bigResponse() throws IOExceptio JsonGenerator generator = factory.createGenerator(writer); generator.writeStartObject(); - generator.writeStringField("start", "here"); - generator.writeStringField("longValue", generateLongString(64*1024)); - generator.writeStringField("end", "here"); + generator.writeStringProperty("start", "here"); + generator.writeStringProperty("longValue", generateLongString(192*1024)); + generator.writeStringProperty("end", "here"); generator.writeEndObject(); generator.flush(); diff --git a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/ActuatorTest.java b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/ActuatorTest.java index bc23e7db..310cdac5 100644 --- a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/ActuatorTest.java +++ b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/ActuatorTest.java @@ -6,9 +6,10 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -16,6 +17,7 @@ import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class ActuatorTest { @LocalServerPort diff --git a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandAllFeaturesTest.java b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandAllFeaturesTest.java index eedc2b72..842f3ba6 100644 --- a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandAllFeaturesTest.java +++ b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandAllFeaturesTest.java @@ -3,9 +3,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -29,6 +30,7 @@ "entur.logging.http.ondemand.troubleshoot.http.headers[0].name=entur-debug-request", "entur.logging.http.ondemand.flush-mode=LAZY", }) +@AutoConfigureTestRestTemplate public class AsyncOndemandAllFeaturesTest { diff --git a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpBadRequestTest.java b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpBadRequestTest.java index 4ed37dd1..2c4df288 100644 --- a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpBadRequestTest.java +++ b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpBadRequestTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -30,6 +31,8 @@ "entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.logger.enabled=false", }) +@AutoConfigureTestRestTemplate + public class AsyncOndemandWebLoggingHttpBadRequestTest { @LocalServerPort diff --git a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpNotFound1Test.java b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpNotFound1Test.java index b738feef..76cc3501 100644 --- a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpNotFound1Test.java +++ b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpNotFound1Test.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -26,6 +27,7 @@ "entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.logger.enabled=false", }) +@AutoConfigureTestRestTemplate public class AsyncOndemandWebLoggingHttpNotFound1Test { @LocalServerPort diff --git a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpNotFound2Test.java b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpNotFound2Test.java index ff9360b0..08a42fe7 100644 --- a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpNotFound2Test.java +++ b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpNotFound2Test.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -27,6 +28,7 @@ "entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.logger.enabled=false", }) +@AutoConfigureTestRestTemplate public class AsyncOndemandWebLoggingHttpNotFound2Test { @LocalServerPort diff --git a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpOkHighLogLevelTest.java b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpOkHighLogLevelTest.java index 2b40fe46..2d03f1ad 100644 --- a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpOkHighLogLevelTest.java +++ b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpOkHighLogLevelTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -27,6 +28,7 @@ "entur.logging.http.ondemand.failure.http.enabled=false", "entur.logging.http.ondemand.failure.logger.level=error", }) +@AutoConfigureTestRestTemplate public class AsyncOndemandWebLoggingHttpOkHighLogLevelTest { @LocalServerPort diff --git a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpOkTest.java b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpOkTest.java index 39f47497..ad2f2a52 100644 --- a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpOkTest.java +++ b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpOkTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -20,6 +21,7 @@ // Triggers by error log level or >= 400 status code by default @TestPropertySource(properties = {"entur.logging.http.ondemand.enabled=true"}) +@AutoConfigureTestRestTemplate public class AsyncOndemandWebLoggingHttpOkTest { @LocalServerPort diff --git a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpOkTroubleshootingTest.java b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpOkTroubleshootingTest.java index 5e55d000..3d8455b0 100644 --- a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpOkTroubleshootingTest.java +++ b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingHttpOkTroubleshootingTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.*; import org.springframework.test.context.TestPropertySource; @@ -22,6 +23,7 @@ "entur.logging.http.ondemand.failure.logger.enabled=false", "entur.logging.http.ondemand.troubleshoot.http.headers[0].name=X-DEBUG" }) +@AutoConfigureTestRestTemplate public class AsyncOndemandWebLoggingHttpOkTroubleshootingTest { @LocalServerPort diff --git a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingSlowResponseTest.java b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingSlowResponseTest.java index 25b0f34c..2dedc579 100644 --- a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingSlowResponseTest.java +++ b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncOndemandWebLoggingSlowResponseTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -29,6 +30,7 @@ "entur.logging.http.ondemand.failure.duration.enabled=true", "entur.logging.http.ondemand.failure.duration.after=500ms", }) +@AutoConfigureTestRestTemplate public class AsyncOndemandWebLoggingSlowResponseTest { @LocalServerPort diff --git a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatTest.java b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatTest.java index 0522d23f..442768d8 100644 --- a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatTest.java +++ b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatTest.java @@ -7,14 +7,16 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class AsyncWebLoggingFormatTest { @LocalServerPort diff --git a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatViaProfileTest.java b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatViaProfileTest.java index 154086f0..5ea2b2c4 100644 --- a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatViaProfileTest.java +++ b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatViaProfileTest.java @@ -3,9 +3,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -15,6 +16,7 @@ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @ActiveProfiles("local") +@AutoConfigureTestRestTemplate public class AsyncWebLoggingFormatViaProfileTest { @LocalServerPort diff --git a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatWithBigResponsesTest.java b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatWithBigResponsesTest.java index ddb872dd..738217a6 100644 --- a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatWithBigResponsesTest.java +++ b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatWithBigResponsesTest.java @@ -4,9 +4,10 @@ import no.entur.logging.cloud.logback.logstash.test.CompositeConsoleOutputControlClosable; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -14,6 +15,7 @@ import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class AsyncWebLoggingFormatWithBigResponsesTest { @LocalServerPort diff --git a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatWithNewlinesTest.java b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatWithNewlinesTest.java index bc68cb19..7668a813 100644 --- a/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatWithNewlinesTest.java +++ b/examples/gcp-async-web-example/src/test/java/org/entur/example/web/AsyncWebLoggingFormatWithNewlinesTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -15,6 +16,7 @@ import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class AsyncWebLoggingFormatWithNewlinesTest { @LocalServerPort diff --git a/examples/azure-grpc-ecosystem-example/README.md b/examples/gcp-grpc-spring-example/README.md similarity index 62% rename from examples/azure-grpc-ecosystem-example/README.md rename to examples/gcp-grpc-spring-example/README.md index 87077ce1..27b35ed5 100644 --- a/examples/azure-grpc-ecosystem-example/README.md +++ b/examples/gcp-grpc-spring-example/README.md @@ -1,4 +1,4 @@ -# azure-grpc-ecosystem-example +# gcp-grpc-spring-example Simple gRPC server example with a few unit tests. diff --git a/examples/gcp-grpc-ecosystem-example/build.gradle b/examples/gcp-grpc-spring-example/build.gradle similarity index 87% rename from examples/gcp-grpc-ecosystem-example/build.gradle rename to examples/gcp-grpc-spring-example/build.gradle index 5a471f30..873cd14d 100644 --- a/examples/gcp-grpc-ecosystem-example/build.gradle +++ b/examples/gcp-grpc-spring-example/build.gradle @@ -1,21 +1,21 @@ plugins { - id 'org.springframework.boot' version '3.5.7' + id 'org.springframework.boot' version '4.0.1' id "com.google.protobuf" version "0.9.6" } test { useJUnitPlatform { - includeEngines 'junit-jupiter', 'junit-vintage' + includeEngines 'junit-jupiter' } } dependencies { implementation project(':on-demand:on-demand-spring-boot-starter-grpc') - implementation project(':gcp:spring-boot-starter-gcp-grpc-ecosystem') - implementation project(':gcp:request-response-spring-boot-starter-gcp-grpc-ecosystem') + implementation project(':gcp:spring-boot-starter-gcp-grpc-spring') + implementation project(':gcp:request-response-spring-boot-starter-gcp-grpc-spring') implementation project(':trace:server:correlation-id-trace-grpc-netty') implementation project(':trace:mdc-context-grpc-netty') - implementation project(':request-response:request-response-spring-boot-autoconfigure-grpc-ecosystem') + implementation project(':request-response:request-response-spring-boot-autoconfigure-grpc-spring') implementation("io.grpc:grpc-api:$grpcVersion") implementation("io.grpc:grpc-core:$grpcVersion") @@ -29,8 +29,8 @@ dependencies { implementation("javax.annotation:javax.annotation-api:1.3.2") - testImplementation project(":gcp:spring-boot-starter-gcp-grpc-ecosystem-test") - testImplementation project(':gcp:request-response-spring-boot-starter-gcp-grpc-ecosystem-test') + testImplementation project(":gcp:spring-boot-starter-gcp-grpc-spring-test") + testImplementation project(':gcp:request-response-spring-boot-starter-gcp-grpc-spring-test') testImplementation("org.springframework.boot:spring-boot-starter-test") // added due to grpc plugin dependency resolution problem diff --git a/examples/gcp-grpc-ecosystem-example/src/main/java/no/entur/grpc/example/AbstractGreetingController.java b/examples/gcp-grpc-spring-example/src/main/java/no/entur/grpc/example/AbstractGreetingController.java similarity index 100% rename from examples/gcp-grpc-ecosystem-example/src/main/java/no/entur/grpc/example/AbstractGreetingController.java rename to examples/gcp-grpc-spring-example/src/main/java/no/entur/grpc/example/AbstractGreetingController.java diff --git a/examples/gcp-grpc-ecosystem-example/src/main/java/no/entur/grpc/example/DemoApplication.java b/examples/gcp-grpc-spring-example/src/main/java/no/entur/grpc/example/DemoApplication.java similarity index 100% rename from examples/gcp-grpc-ecosystem-example/src/main/java/no/entur/grpc/example/DemoApplication.java rename to examples/gcp-grpc-spring-example/src/main/java/no/entur/grpc/example/DemoApplication.java diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/java/no/entur/grpc/example/GreetingController.java b/examples/gcp-grpc-spring-example/src/main/java/no/entur/grpc/example/GreetingController.java similarity index 92% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/java/no/entur/grpc/example/GreetingController.java rename to examples/gcp-grpc-spring-example/src/main/java/no/entur/grpc/example/GreetingController.java index 044bb3d0..6dea440c 100644 --- a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/java/no/entur/grpc/example/GreetingController.java +++ b/examples/gcp-grpc-spring-example/src/main/java/no/entur/grpc/example/GreetingController.java @@ -1,12 +1,12 @@ package no.entur.grpc.example; -import net.devh.boot.grpc.server.service.GrpcService; import no.entur.logging.cloud.gcp.trace.spring.grpc.interceptor.OrderedTraceIdGrpcMdcContextServerInterceptor; import no.entur.logging.cloud.spring.rr.grpc.OrderedGrpcLoggingServerInterceptor; import no.entur.logging.cloud.spring.rr.grpc.RequestResponseGrpcExceptionHandlerInterceptor; import no.entur.logging.cloud.trace.spring.grpc.interceptor.OrderedCorrelationIdGrpcMdcContextServerInterceptor; import org.springframework.context.annotation.Profile; +import org.springframework.grpc.server.service.GrpcService; // note: order is reversed compared to lognet @GrpcService(interceptors = { @@ -21,7 +21,7 @@ // Validation MyValidationServerInterceptor.class, -}, sortInterceptors = true) +}) @Profile("!ondemand") public class GreetingController extends AbstractGreetingController { diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/java/no/entur/grpc/example/GreetingControllerWithOnDemandLogging.java b/examples/gcp-grpc-spring-example/src/main/java/no/entur/grpc/example/GreetingControllerWithOnDemandLogging.java similarity index 93% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/java/no/entur/grpc/example/GreetingControllerWithOnDemandLogging.java rename to examples/gcp-grpc-spring-example/src/main/java/no/entur/grpc/example/GreetingControllerWithOnDemandLogging.java index 7570840f..4e3404ff 100644 --- a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/java/no/entur/grpc/example/GreetingControllerWithOnDemandLogging.java +++ b/examples/gcp-grpc-spring-example/src/main/java/no/entur/grpc/example/GreetingControllerWithOnDemandLogging.java @@ -1,13 +1,13 @@ package no.entur.grpc.example; -import net.devh.boot.grpc.server.service.GrpcService; import no.entur.logging.cloud.gcp.trace.spring.grpc.interceptor.OrderedTraceIdGrpcMdcContextServerInterceptor; import no.entur.logging.cloud.spring.ondemand.grpc.scope.GrpcLoggingScopeContextInterceptor; import no.entur.logging.cloud.spring.rr.grpc.OrderedGrpcLoggingServerInterceptor; import no.entur.logging.cloud.spring.rr.grpc.RequestResponseGrpcExceptionHandlerInterceptor; import no.entur.logging.cloud.trace.spring.grpc.interceptor.OrderedCorrelationIdGrpcMdcContextServerInterceptor; import org.springframework.context.annotation.Profile; +import org.springframework.grpc.server.service.GrpcService; @Profile("ondemand") @GrpcService(interceptors = { @@ -22,7 +22,7 @@ // Validation MyValidationServerInterceptor.class, -}, sortInterceptors = true) +}) public class GreetingControllerWithOnDemandLogging extends AbstractGreetingController { } \ No newline at end of file diff --git a/examples/gcp-grpc-ecosystem-example/src/main/java/no/entur/grpc/example/MyGrpcConfig.java b/examples/gcp-grpc-spring-example/src/main/java/no/entur/grpc/example/MyGrpcConfig.java similarity index 100% rename from examples/gcp-grpc-ecosystem-example/src/main/java/no/entur/grpc/example/MyGrpcConfig.java rename to examples/gcp-grpc-spring-example/src/main/java/no/entur/grpc/example/MyGrpcConfig.java diff --git a/examples/gcp-grpc-ecosystem-example/src/main/java/no/entur/grpc/example/MyValidationServerInterceptor.java b/examples/gcp-grpc-spring-example/src/main/java/no/entur/grpc/example/MyValidationServerInterceptor.java similarity index 100% rename from examples/gcp-grpc-ecosystem-example/src/main/java/no/entur/grpc/example/MyValidationServerInterceptor.java rename to examples/gcp-grpc-spring-example/src/main/java/no/entur/grpc/example/MyValidationServerInterceptor.java diff --git a/examples/gcp-grpc-ecosystem-example/src/main/proto/greeting_message.proto b/examples/gcp-grpc-spring-example/src/main/proto/greeting_message.proto similarity index 100% rename from examples/gcp-grpc-ecosystem-example/src/main/proto/greeting_message.proto rename to examples/gcp-grpc-spring-example/src/main/proto/greeting_message.proto diff --git a/examples/gcp-grpc-ecosystem-example/src/main/proto/greeting_service.proto b/examples/gcp-grpc-spring-example/src/main/proto/greeting_service.proto similarity index 100% rename from examples/gcp-grpc-ecosystem-example/src/main/proto/greeting_service.proto rename to examples/gcp-grpc-spring-example/src/main/proto/greeting_service.proto diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/resources/application.properties b/examples/gcp-grpc-spring-example/src/main/resources/application.properties similarity index 57% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/resources/application.properties rename to examples/gcp-grpc-spring-example/src/main/resources/application.properties index 28667eaa..63fcf66f 100644 --- a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/resources/application.properties +++ b/examples/gcp-grpc-spring-example/src/main/resources/application.properties @@ -11,6 +11,7 @@ logging.level.root=debug entur.jwt.mdc.enabled=true -entur.logging.grpc.trace.mdc.interceptor-order=50 -entur.logging.request-response.grpc.server.interceptor-order=5170 -entur.logging.request-response.grpc.server.exception-handler.interceptor-order=5175 +# Optional: +# entur.logging.grpc.trace.mdc.interceptor-order=1000 +# entur.logging.request-response.grpc.server.interceptor-order=2000 +# entur.logging.request-response.grpc.server.exception-handler.interceptor-order=3000 diff --git a/examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemAbstractGrpcTest.java b/examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringAbstractGrpcTest.java similarity index 93% rename from examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemAbstractGrpcTest.java rename to examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringAbstractGrpcTest.java index 041e2039..2a115c02 100644 --- a/examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemAbstractGrpcTest.java +++ b/examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringAbstractGrpcTest.java @@ -9,7 +9,7 @@ import java.util.concurrent.TimeUnit; -public class EcosystemAbstractGrpcTest { +public class SpringAbstractGrpcTest { // https://github.com/olivere/grpc-demo/blob/master/java-client/src/main/java/com/altf4/grpc/client/ExampleClient.java public static final int MAX_INBOUND_MESSAGE_SIZE = 1 << 20; @@ -23,11 +23,11 @@ public class EcosystemAbstractGrpcTest { protected final int maxOutboundMessageSize; protected final int maxInboundMessageSize; - public EcosystemAbstractGrpcTest() { + public SpringAbstractGrpcTest() { this(MAX_INBOUND_MESSAGE_SIZE, MAX_OUTBOUND_MESSAGE_SIZE); } - public EcosystemAbstractGrpcTest(int maxInboundMessageSize, int maxOutboundMessageSize) { + public SpringAbstractGrpcTest(int maxInboundMessageSize, int maxOutboundMessageSize) { this.maxInboundMessageSize = maxInboundMessageSize; this.maxOutboundMessageSize = maxOutboundMessageSize; } diff --git a/examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemGreetingTest.java b/examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringGreetingTest.java similarity index 98% rename from examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemGreetingTest.java rename to examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringGreetingTest.java index 9378bc68..f3ff284b 100644 --- a/examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemGreetingTest.java +++ b/examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringGreetingTest.java @@ -7,8 +7,6 @@ import no.entur.logging.cloud.api.DevOpsLevel; import no.entur.logging.cloud.grpc.trace.CorrelationIdGrpcMdcContext; -import no.entur.logging.cloud.logback.logstash.test.CompositeConsoleOutputControl; -import no.entur.logging.cloud.logback.logstash.test.CompositeConsoleOutputControlClosable; import no.entur.logging.cloud.logback.logstash.test.junit.CaptureLogStatements; import no.entur.logging.cloud.logback.logstash.test.junit.LogStatement; import no.entur.logging.cloud.logback.logstash.test.junit.LogStatements; @@ -42,7 +40,7 @@ @SpringBootTest @DirtiesContext @CaptureLogStatements(level = DevOpsLevel.DEBUG, value = {"no.entur", "org.entur"}) -public class EcosystemGreetingTest extends EcosystemAbstractGrpcTest { +public class SpringGreetingTest extends SpringAbstractGrpcTest { @Test public void testBlockingRequestsOnSameStub() throws InterruptedException { diff --git a/examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemGrpcLoggingFormatTest.java b/examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringGrpcLoggingFormatTest.java similarity index 95% rename from examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemGrpcLoggingFormatTest.java rename to examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringGrpcLoggingFormatTest.java index e59d3f80..1165509d 100644 --- a/examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemGrpcLoggingFormatTest.java +++ b/examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringGrpcLoggingFormatTest.java @@ -12,7 +12,7 @@ @SpringBootTest @DirtiesContext -public class EcosystemGrpcLoggingFormatTest extends EcosystemAbstractGrpcTest { +public class SpringGrpcLoggingFormatTest extends SpringAbstractGrpcTest { @Test public void useHumanReadablePlainEncoderTest() throws InterruptedException { diff --git a/examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemOndemandGrpcLoggingFormatTest.java b/examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringOndemandGrpcLoggingFormatTest.java similarity index 94% rename from examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemOndemandGrpcLoggingFormatTest.java rename to examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringOndemandGrpcLoggingFormatTest.java index f2fb4297..b88745eb 100644 --- a/examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemOndemandGrpcLoggingFormatTest.java +++ b/examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringOndemandGrpcLoggingFormatTest.java @@ -16,9 +16,12 @@ @SpringBootTest @ActiveProfiles("ondemand") -@TestPropertySource(properties = {"entur.logging.grpc.ondemand.enabled=true"}) +@TestPropertySource(properties = { + "entur.logging.grpc.ondemand.enabled=true", + "entur.logging.grpc.ondemand.failure.logger.enabled=false", +}) @DirtiesContext -public class EcosystemOndemandGrpcLoggingFormatTest extends EcosystemAbstractGrpcTest { +public class SpringOndemandGrpcLoggingFormatTest extends SpringAbstractGrpcTest { @Test public void useHumanReadablePlainEncoderExpectFullLogging() { diff --git a/examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemOndemandGrpcLoggingHighLogLevelTest.java b/examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringOndemandGrpcLoggingHighLogLevelTest.java similarity index 95% rename from examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemOndemandGrpcLoggingHighLogLevelTest.java rename to examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringOndemandGrpcLoggingHighLogLevelTest.java index 5eee1b84..1a9059f9 100644 --- a/examples/gcp-grpc-ecosystem-example/src/test/java/no/entur/grpc/example/EcosystemOndemandGrpcLoggingHighLogLevelTest.java +++ b/examples/gcp-grpc-spring-example/src/test/java/no/entur/grpc/example/SpringOndemandGrpcLoggingHighLogLevelTest.java @@ -26,7 +26,7 @@ "entur.logging.http.ondemand.failure.logger.level=error", }) @DirtiesContext -public class EcosystemOndemandGrpcLoggingHighLogLevelTest extends EcosystemAbstractGrpcTest { +public class SpringOndemandGrpcLoggingHighLogLevelTest extends SpringAbstractGrpcTest { @Test public void useHumanReadablePlainEncoderExpectFullLogging() throws InterruptedException { diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/README.md b/examples/gcp-grpc-spring-without-test-artifacts-example/README.md similarity index 73% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/README.md rename to examples/gcp-grpc-spring-without-test-artifacts-example/README.md index cd627513..1ef325b7 100644 --- a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/README.md +++ b/examples/gcp-grpc-spring-without-test-artifacts-example/README.md @@ -1,4 +1,4 @@ -# gcp-grpc-ecosystem-without-test-artifacts-example +# gcp-grpc-spring-without-test-artifacts-example Simple GRPC service example without test dependencies from this project. This emulates the deployed application (i.e. machine-readable JSON). diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/build.gradle b/examples/gcp-grpc-spring-without-test-artifacts-example/build.gradle similarity index 88% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/build.gradle rename to examples/gcp-grpc-spring-without-test-artifacts-example/build.gradle index 49f46454..7d431ea0 100644 --- a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/build.gradle +++ b/examples/gcp-grpc-spring-without-test-artifacts-example/build.gradle @@ -1,20 +1,20 @@ plugins { - id 'org.springframework.boot' version '3.5.7' + id 'org.springframework.boot' version '4.0.1' id "com.google.protobuf" version "0.9.6" } test { useJUnitPlatform { - includeEngines 'junit-jupiter', 'junit-vintage' + includeEngines 'junit-jupiter' } } dependencies { implementation project(':on-demand:on-demand-spring-boot-starter-grpc') - implementation project(':gcp:spring-boot-starter-gcp-grpc-ecosystem') - implementation project(':gcp:request-response-spring-boot-starter-gcp-grpc-ecosystem') + implementation project(':gcp:spring-boot-starter-gcp-grpc-spring') + implementation project(':gcp:request-response-spring-boot-starter-gcp-grpc-spring') implementation project(':trace:server:correlation-id-trace-grpc-netty') - implementation project(':request-response:request-response-spring-boot-autoconfigure-grpc-ecosystem') + implementation project(':request-response:request-response-spring-boot-autoconfigure-grpc-spring') implementation project(':trace:mdc-context-grpc-netty') diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/java/no/entur/grpc/example/AbstractGreetingController.java b/examples/gcp-grpc-spring-without-test-artifacts-example/src/main/java/no/entur/grpc/example/AbstractGreetingController.java similarity index 100% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/java/no/entur/grpc/example/AbstractGreetingController.java rename to examples/gcp-grpc-spring-without-test-artifacts-example/src/main/java/no/entur/grpc/example/AbstractGreetingController.java diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/java/no/entur/grpc/example/DemoApplication.java b/examples/gcp-grpc-spring-without-test-artifacts-example/src/main/java/no/entur/grpc/example/DemoApplication.java similarity index 100% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/java/no/entur/grpc/example/DemoApplication.java rename to examples/gcp-grpc-spring-without-test-artifacts-example/src/main/java/no/entur/grpc/example/DemoApplication.java diff --git a/examples/gcp-grpc-ecosystem-example/src/main/java/no/entur/grpc/example/GreetingController.java b/examples/gcp-grpc-spring-without-test-artifacts-example/src/main/java/no/entur/grpc/example/GreetingController.java similarity index 92% rename from examples/gcp-grpc-ecosystem-example/src/main/java/no/entur/grpc/example/GreetingController.java rename to examples/gcp-grpc-spring-without-test-artifacts-example/src/main/java/no/entur/grpc/example/GreetingController.java index 044bb3d0..6dea440c 100644 --- a/examples/gcp-grpc-ecosystem-example/src/main/java/no/entur/grpc/example/GreetingController.java +++ b/examples/gcp-grpc-spring-without-test-artifacts-example/src/main/java/no/entur/grpc/example/GreetingController.java @@ -1,12 +1,12 @@ package no.entur.grpc.example; -import net.devh.boot.grpc.server.service.GrpcService; import no.entur.logging.cloud.gcp.trace.spring.grpc.interceptor.OrderedTraceIdGrpcMdcContextServerInterceptor; import no.entur.logging.cloud.spring.rr.grpc.OrderedGrpcLoggingServerInterceptor; import no.entur.logging.cloud.spring.rr.grpc.RequestResponseGrpcExceptionHandlerInterceptor; import no.entur.logging.cloud.trace.spring.grpc.interceptor.OrderedCorrelationIdGrpcMdcContextServerInterceptor; import org.springframework.context.annotation.Profile; +import org.springframework.grpc.server.service.GrpcService; // note: order is reversed compared to lognet @GrpcService(interceptors = { @@ -21,7 +21,7 @@ // Validation MyValidationServerInterceptor.class, -}, sortInterceptors = true) +}) @Profile("!ondemand") public class GreetingController extends AbstractGreetingController { diff --git a/examples/gcp-grpc-ecosystem-example/src/main/java/no/entur/grpc/example/GreetingControllerWithOnDemandLogging.java b/examples/gcp-grpc-spring-without-test-artifacts-example/src/main/java/no/entur/grpc/example/GreetingControllerWithOnDemandLogging.java similarity index 93% rename from examples/gcp-grpc-ecosystem-example/src/main/java/no/entur/grpc/example/GreetingControllerWithOnDemandLogging.java rename to examples/gcp-grpc-spring-without-test-artifacts-example/src/main/java/no/entur/grpc/example/GreetingControllerWithOnDemandLogging.java index 7570840f..4e3404ff 100644 --- a/examples/gcp-grpc-ecosystem-example/src/main/java/no/entur/grpc/example/GreetingControllerWithOnDemandLogging.java +++ b/examples/gcp-grpc-spring-without-test-artifacts-example/src/main/java/no/entur/grpc/example/GreetingControllerWithOnDemandLogging.java @@ -1,13 +1,13 @@ package no.entur.grpc.example; -import net.devh.boot.grpc.server.service.GrpcService; import no.entur.logging.cloud.gcp.trace.spring.grpc.interceptor.OrderedTraceIdGrpcMdcContextServerInterceptor; import no.entur.logging.cloud.spring.ondemand.grpc.scope.GrpcLoggingScopeContextInterceptor; import no.entur.logging.cloud.spring.rr.grpc.OrderedGrpcLoggingServerInterceptor; import no.entur.logging.cloud.spring.rr.grpc.RequestResponseGrpcExceptionHandlerInterceptor; import no.entur.logging.cloud.trace.spring.grpc.interceptor.OrderedCorrelationIdGrpcMdcContextServerInterceptor; import org.springframework.context.annotation.Profile; +import org.springframework.grpc.server.service.GrpcService; @Profile("ondemand") @GrpcService(interceptors = { @@ -22,7 +22,7 @@ // Validation MyValidationServerInterceptor.class, -}, sortInterceptors = true) +}) public class GreetingControllerWithOnDemandLogging extends AbstractGreetingController { } \ No newline at end of file diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/java/no/entur/grpc/example/MyGrpcConfig.java b/examples/gcp-grpc-spring-without-test-artifacts-example/src/main/java/no/entur/grpc/example/MyGrpcConfig.java similarity index 100% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/java/no/entur/grpc/example/MyGrpcConfig.java rename to examples/gcp-grpc-spring-without-test-artifacts-example/src/main/java/no/entur/grpc/example/MyGrpcConfig.java diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/java/no/entur/grpc/example/MyValidationServerInterceptor.java b/examples/gcp-grpc-spring-without-test-artifacts-example/src/main/java/no/entur/grpc/example/MyValidationServerInterceptor.java similarity index 100% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/java/no/entur/grpc/example/MyValidationServerInterceptor.java rename to examples/gcp-grpc-spring-without-test-artifacts-example/src/main/java/no/entur/grpc/example/MyValidationServerInterceptor.java diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/proto/greeting_message.proto b/examples/gcp-grpc-spring-without-test-artifacts-example/src/main/proto/greeting_message.proto similarity index 100% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/proto/greeting_message.proto rename to examples/gcp-grpc-spring-without-test-artifacts-example/src/main/proto/greeting_message.proto diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/proto/greeting_service.proto b/examples/gcp-grpc-spring-without-test-artifacts-example/src/main/proto/greeting_service.proto similarity index 100% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/main/proto/greeting_service.proto rename to examples/gcp-grpc-spring-without-test-artifacts-example/src/main/proto/greeting_service.proto diff --git a/examples/gcp-grpc-ecosystem-example/src/main/resources/application.properties b/examples/gcp-grpc-spring-without-test-artifacts-example/src/main/resources/application.properties similarity index 100% rename from examples/gcp-grpc-ecosystem-example/src/main/resources/application.properties rename to examples/gcp-grpc-spring-without-test-artifacts-example/src/main/resources/application.properties diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemAbstractGrpcTest.java b/examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringAbstractGrpcTest.java similarity index 92% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemAbstractGrpcTest.java rename to examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringAbstractGrpcTest.java index 041e2039..055e9deb 100644 --- a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemAbstractGrpcTest.java +++ b/examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringAbstractGrpcTest.java @@ -1,4 +1,4 @@ -package no.entur.grpc.example; +package no.entur.grpc.example.without.test.artifacts; import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; @@ -9,7 +9,7 @@ import java.util.concurrent.TimeUnit; -public class EcosystemAbstractGrpcTest { +public class SpringAbstractGrpcTest { // https://github.com/olivere/grpc-demo/blob/master/java-client/src/main/java/com/altf4/grpc/client/ExampleClient.java public static final int MAX_INBOUND_MESSAGE_SIZE = 1 << 20; @@ -23,11 +23,11 @@ public class EcosystemAbstractGrpcTest { protected final int maxOutboundMessageSize; protected final int maxInboundMessageSize; - public EcosystemAbstractGrpcTest() { + public SpringAbstractGrpcTest() { this(MAX_INBOUND_MESSAGE_SIZE, MAX_OUTBOUND_MESSAGE_SIZE); } - public EcosystemAbstractGrpcTest(int maxInboundMessageSize, int maxOutboundMessageSize) { + public SpringAbstractGrpcTest(int maxInboundMessageSize, int maxOutboundMessageSize) { this.maxInboundMessageSize = maxInboundMessageSize; this.maxOutboundMessageSize = maxOutboundMessageSize; } diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemGreetingTest.java b/examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringGreetingTest.java similarity index 98% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemGreetingTest.java rename to examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringGreetingTest.java index 1b4209cf..0f3e8f7b 100644 --- a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemGreetingTest.java +++ b/examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringGreetingTest.java @@ -1,4 +1,4 @@ -package no.entur.grpc.example; +package no.entur.grpc.example.without.test.artifacts; import com.google.common.util.concurrent.ListenableFuture; import com.google.protobuf.Timestamp; @@ -33,7 +33,7 @@ */ @SpringBootTest @DirtiesContext -public class EcosystemGreetingTest extends EcosystemAbstractGrpcTest { +public class SpringGreetingTest extends SpringAbstractGrpcTest { @Test public void testBlockingRequestsOnSameStub() throws InterruptedException { diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemGrpcLoggingFormatTest.java b/examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringGrpcLoggingFormatTest.java similarity index 83% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemGrpcLoggingFormatTest.java rename to examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringGrpcLoggingFormatTest.java index 562fcef6..e9570c2d 100644 --- a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemGrpcLoggingFormatTest.java +++ b/examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringGrpcLoggingFormatTest.java @@ -1,4 +1,4 @@ -package no.entur.grpc.example; +package no.entur.grpc.example.without.test.artifacts; import org.entur.grpc.example.GreetingResponse; import org.entur.grpc.example.GreetingServiceGrpc; @@ -10,7 +10,7 @@ @SpringBootTest @DirtiesContext -public class EcosystemGrpcLoggingFormatTest extends EcosystemAbstractGrpcTest { +public class SpringGrpcLoggingFormatTest extends SpringAbstractGrpcTest { @Test public void useMachineReadableJsonEncoder() throws InterruptedException { diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemOndemandGrpcLoggingFormatTest.java b/examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringOndemandGrpcLoggingFormatTest.java similarity index 91% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemOndemandGrpcLoggingFormatTest.java rename to examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringOndemandGrpcLoggingFormatTest.java index c3ac0e50..8f5fa78a 100644 --- a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemOndemandGrpcLoggingFormatTest.java +++ b/examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringOndemandGrpcLoggingFormatTest.java @@ -1,4 +1,4 @@ -package no.entur.grpc.example; +package no.entur.grpc.example.without.test.artifacts; import io.grpc.StatusRuntimeException; import org.entur.grpc.example.GreetingResponse; @@ -16,7 +16,7 @@ @ActiveProfiles("ondemand") @TestPropertySource(properties = {"entur.logging.grpc.ondemand.enabled=true"}) @DirtiesContext -public class EcosystemOndemandGrpcLoggingFormatTest extends EcosystemAbstractGrpcTest { +public class SpringOndemandGrpcLoggingFormatTest extends SpringAbstractGrpcTest { @Test public void useMachineReadableJsonEncoderExpectFullLogging() throws InterruptedException { diff --git a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemOndemandGrpcLoggingHighLogLevelTest.java b/examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringOndemandGrpcLoggingHighLogLevelTest.java similarity index 87% rename from examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemOndemandGrpcLoggingHighLogLevelTest.java rename to examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringOndemandGrpcLoggingHighLogLevelTest.java index b87dfdcc..c9ed6f30 100644 --- a/examples/gcp-grpc-ecosystem-without-test-artifacts-example/src/test/java/no/entur/grpc/example/EcosystemOndemandGrpcLoggingHighLogLevelTest.java +++ b/examples/gcp-grpc-spring-without-test-artifacts-example/src/test/java/no/entur/grpc/example/without/test/artifacts/SpringOndemandGrpcLoggingHighLogLevelTest.java @@ -1,6 +1,5 @@ -package no.entur.grpc.example; +package no.entur.grpc.example.without.test.artifacts; -import io.grpc.StatusRuntimeException; import org.entur.grpc.example.GreetingResponse; import org.entur.grpc.example.GreetingServiceGrpc; import org.junit.jupiter.api.Test; @@ -25,7 +24,7 @@ "entur.logging.http.ondemand.failure.logger.level=error", }) @DirtiesContext -public class EcosystemOndemandGrpcLoggingHighLogLevelTest extends EcosystemAbstractGrpcTest { +public class SpringOndemandGrpcLoggingHighLogLevelTest extends SpringAbstractGrpcTest { @Test public void useMachineReadableJsonEncoderExpectFullLogging() throws InterruptedException { diff --git a/examples/gcp-web-apache-client-example/build.gradle b/examples/gcp-web-apache-client-example/build.gradle index 663c3a10..4c490a2d 100644 --- a/examples/gcp-web-apache-client-example/build.gradle +++ b/examples/gcp-web-apache-client-example/build.gradle @@ -1,10 +1,10 @@ plugins { - id 'org.springframework.boot' version '3.5.7' + id 'org.springframework.boot' version '4.0.1' } test { useJUnitPlatform { - includeEngines 'junit-jupiter', 'junit-vintage' + includeEngines 'junit-jupiter' } } @@ -23,6 +23,8 @@ dependencies { testImplementation project(":gcp:request-response-spring-boot-starter-gcp-web-test"); testImplementation("org.springframework.boot:spring-boot-starter-test") + testImplementation("org.springframework.boot:spring-boot-restclient") + testImplementation("org.springframework.boot:spring-boot-resttestclient") // JUnit Jupiter API and TestEngine implementation testImplementation("org.junit.jupiter:junit-jupiter-api") diff --git a/examples/gcp-web-apache-client-example/src/main/java/org/entur/example/web/rest/DocumentEndpoint.java b/examples/gcp-web-apache-client-example/src/main/java/org/entur/example/web/rest/DocumentEndpoint.java index b063d3bd..00c4609c 100644 --- a/examples/gcp-web-apache-client-example/src/main/java/org/entur/example/web/rest/DocumentEndpoint.java +++ b/examples/gcp-web-apache-client-example/src/main/java/org/entur/example/web/rest/DocumentEndpoint.java @@ -1,9 +1,5 @@ package org.entur.example.web.rest; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; import org.apache.hc.client5.http.classic.methods.HttpPost; import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; @@ -14,21 +10,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.env.Environment; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; - -import java.io.ByteArrayOutputStream; -import java.io.CharArrayWriter; -import java.io.IOException; -import java.util.concurrent.CompletableFuture; +import tools.jackson.databind.json.JsonMapper; @RestController @RequestMapping("/api/document") @@ -39,7 +25,7 @@ public class DocumentEndpoint { @Autowired private CloseableHttpClient httpclient; - private ObjectMapper mapper = new ObjectMapper(); + private JsonMapper mapper = JsonMapper.builder().build(); @PostMapping("/some/method") public MyEntity someMessage(@RequestBody MyEntity entity, HttpServletRequest request) throws Exception { diff --git a/examples/gcp-web-apache-client-example/src/main/java/org/entur/example/web/rest/DummyEndpoint.java b/examples/gcp-web-apache-client-example/src/main/java/org/entur/example/web/rest/DummyEndpoint.java index 96588af3..790a193d 100644 --- a/examples/gcp-web-apache-client-example/src/main/java/org/entur/example/web/rest/DummyEndpoint.java +++ b/examples/gcp-web-apache-client-example/src/main/java/org/entur/example/web/rest/DummyEndpoint.java @@ -1,18 +1,9 @@ package org.entur.example.web.rest; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; -import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import java.io.CharArrayWriter; -import java.io.IOException; - /** * * Simulation of downstream service diff --git a/examples/gcp-web-apache-client-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java b/examples/gcp-web-apache-client-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java index 5aeef7f4..6b828ab9 100644 --- a/examples/gcp-web-apache-client-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java +++ b/examples/gcp-web-apache-client-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java @@ -7,14 +7,16 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class WebLoggingFormatTest { @LocalServerPort diff --git a/examples/gcp-web-example/build.gradle b/examples/gcp-web-example/build.gradle index 6b27a7f7..7601e610 100644 --- a/examples/gcp-web-example/build.gradle +++ b/examples/gcp-web-example/build.gradle @@ -1,10 +1,10 @@ plugins { - id 'org.springframework.boot' version '3.5.7' + id 'org.springframework.boot' version '4.0.1' } test { useJUnitPlatform { - includeEngines 'junit-jupiter', 'junit-vintage' + includeEngines 'junit-jupiter' } } @@ -21,6 +21,8 @@ dependencies { testImplementation project(":gcp:request-response-spring-boot-starter-gcp-web-test"); testImplementation("org.springframework.boot:spring-boot-starter-test") + testImplementation("org.springframework.boot:spring-boot-restclient") + testImplementation("org.springframework.boot:spring-boot-resttestclient") // JUnit Jupiter API and TestEngine implementation testImplementation("org.junit.jupiter:junit-jupiter-api") diff --git a/examples/gcp-web-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java b/examples/gcp-web-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java index c315dd7e..a5423a02 100644 --- a/examples/gcp-web-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java +++ b/examples/gcp-web-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java @@ -16,7 +16,6 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .csrf( c -> c.disable() ) .authorizeHttpRequests((authorize) -> { authorize.requestMatchers("/api/secured/endpoint").fullyAuthenticated(); - authorize.anyRequest().permitAll(); } ); diff --git a/examples/gcp-web-example/src/main/java/org/entur/example/web/rest/DocumentEndpoint.java b/examples/gcp-web-example/src/main/java/org/entur/example/web/rest/DocumentEndpoint.java index e98f74e5..34d6ba89 100644 --- a/examples/gcp-web-example/src/main/java/org/entur/example/web/rest/DocumentEndpoint.java +++ b/examples/gcp-web-example/src/main/java/org/entur/example/web/rest/DocumentEndpoint.java @@ -1,7 +1,6 @@ package org.entur.example.web.rest; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; @@ -13,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import tools.jackson.core.json.JsonFactory; import java.io.ByteArrayOutputStream; import java.io.CharArrayWriter; @@ -86,9 +86,9 @@ ResponseEntity bigResponse() throws IOException { JsonGenerator generator = factory.createGenerator(writer); generator.writeStartObject(); - generator.writeStringField("start", "here"); - generator.writeStringField("longValue", generateLongString(64*1024)); - generator.writeStringField("end", "here"); + generator.writeStringProperty("start", "here"); + generator.writeStringProperty("longValue", generateLongString(192*1024)); + generator.writeStringProperty("end", "here"); generator.writeEndObject(); generator.flush(); diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/ActuatorTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/ActuatorTest.java index a9b7baef..3d325402 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/ActuatorTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/ActuatorTest.java @@ -6,9 +6,10 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -16,6 +17,7 @@ import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class ActuatorTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/ActuatorWithoutExcludesTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/ActuatorWithoutExcludesTest.java index eadfb3d7..1cbe9888 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/ActuatorWithoutExcludesTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/ActuatorWithoutExcludesTest.java @@ -4,9 +4,10 @@ import no.entur.logging.cloud.logback.logstash.test.CompositeConsoleOutputControlClosable; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -18,6 +19,7 @@ @TestPropertySource(properties = { "entur.logging.request-response.logbook.default-excludes=false" }) +@AutoConfigureTestRestTemplate public class ActuatorWithoutExcludesTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpBadRequestTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpBadRequestTest.java index 89499596..4d7854d2 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpBadRequestTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpBadRequestTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -30,6 +31,7 @@ "entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.logger.enabled=false", }) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpBadRequestTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1AsyncTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1AsyncTest.java index a2b6d220..4ed55268 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1AsyncTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1AsyncTest.java @@ -7,9 +7,10 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -27,6 +28,7 @@ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @ActiveProfiles("async") @TestPropertySource(properties = {"entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.http.statusCode.equalOrHigherThan=400", "entur.logging.http.ondemand.failure.logger.level=error", "entur.logging.http.ondemand.failure.level=info"}) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpNotFound1AsyncTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1Test.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1Test.java index b1e7934f..105be14f 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1Test.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1Test.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -26,6 +27,7 @@ "entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.logger.enabled=false", }) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpNotFound1Test { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound2Test.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound2Test.java index 563f0f84..aa04e47f 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound2Test.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound2Test.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -27,6 +28,7 @@ "entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.logger.enabled=false" }) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpNotFound2Test { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelLazyTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelLazyTest.java index 047a2d1a..31271645 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelLazyTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelLazyTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -28,6 +29,7 @@ "entur.logging.http.ondemand.failure.logger.level=error", "entur.logging.http.ondemand.flushMode=lazy", }) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpOkHighLogLevelLazyTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelTest.java index a5480078..f6a1d260 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -27,6 +28,7 @@ "entur.logging.http.ondemand.failure.http.enabled=false", "entur.logging.http.ondemand.failure.logger.level=error", }) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpOkHighLogLevelTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTest.java index a5158063..d9b8a97f 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -20,6 +21,7 @@ // Triggers by error log level or >= 400 status code by default @TestPropertySource(properties = {"entur.logging.http.ondemand.enabled=true"}) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpOkTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTroubleshootingTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTroubleshootingTest.java index a3e6d842..2a73a0f9 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTroubleshootingTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTroubleshootingTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.*; import org.springframework.test.context.TestPropertySource; @@ -22,6 +23,7 @@ "entur.logging.http.ondemand.failure.logger.enabled=false", "entur.logging.http.ondemand.troubleshoot.http.headers[0].name=X-DEBUG" }) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpOkTroubleshootingTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingSlowResponseTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingSlowResponseTest.java index a99e7998..b68e05ee 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingSlowResponseTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/OndemandWebLoggingSlowResponseTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -29,6 +30,7 @@ "entur.logging.http.ondemand.failure.duration.enabled=true", "entur.logging.http.ondemand.failure.duration.after=500ms", }) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingSlowResponseTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp401Test.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp401Test.java index c518b234..19639e8c 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp401Test.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp401Test.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -28,8 +29,7 @@ "logbook.secure-filter.enabled=false" }) - - +@AutoConfigureTestRestTemplate public class WebLoggingFormatHttp401Test { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp403Test.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp403Test.java index 39a0471a..b652cd06 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp403Test.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp403Test.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -21,6 +22,7 @@ @TestPropertySource(properties = { "logbook.secure-filter.enabled=false" }) +@AutoConfigureTestRestTemplate public class WebLoggingFormatHttp403Test { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp403ViaAuthorizationDeniedExceptionTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp403ViaAuthorizationDeniedExceptionTest.java index 2024103b..95c9321b 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp403ViaAuthorizationDeniedExceptionTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp403ViaAuthorizationDeniedExceptionTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -20,6 +21,7 @@ "logbook.secure-filter.enabled=false", // 401 and 403 is logged twice via Sink.writeBoth(..) "entur.logging.request-response.http.server.controller-advice.enabled=true" }) +@AutoConfigureTestRestTemplate public class WebLoggingFormatHttp403ViaAuthorizationDeniedExceptionTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp500ViaNullpointerExceptionTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp500ViaNullpointerExceptionTest.java index 663eb58f..604e2afd 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp500ViaNullpointerExceptionTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatHttp500ViaNullpointerExceptionTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -19,6 +20,7 @@ @TestPropertySource(properties = { "entur.logging.request-response.http.server.controller-advice.enabled=true" }) +@AutoConfigureTestRestTemplate public class WebLoggingFormatHttp500ViaNullpointerExceptionTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java index 5aeef7f4..6b828ab9 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java @@ -7,14 +7,16 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class WebLoggingFormatTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaProfileTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaProfileTest.java index 039197e6..554778f4 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaProfileTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaProfileTest.java @@ -6,9 +6,10 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; @@ -24,6 +25,7 @@ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @ActiveProfiles("local") +@AutoConfigureTestRestTemplate public class WebLoggingFormatViaProfileTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaPropertyTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaPropertyTest.java index 26edb1d3..b36f4754 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaPropertyTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatViaPropertyTest.java @@ -3,9 +3,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -18,6 +19,7 @@ @TestPropertySource(properties = { "entur.logging.style=HumanReadableJson", }) +@AutoConfigureTestRestTemplate public class WebLoggingFormatViaPropertyTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithBigResponsesTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithBigResponsesTest.java index b8779881..5ca80c03 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithBigResponsesTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithBigResponsesTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -15,6 +16,7 @@ import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class WebLoggingFormatWithBigResponsesTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithNewlinesTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithNewlinesTest.java index 0e9d7d4f..26503314 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithNewlinesTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingFormatWithNewlinesTest.java @@ -5,9 +5,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -15,6 +16,7 @@ import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class WebLoggingFormatWithNewlinesTest { @LocalServerPort diff --git a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingMessageFormatTest.java b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingMessageFormatTest.java index 729eb1b2..a245a240 100644 --- a/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingMessageFormatTest.java +++ b/examples/gcp-web-example/src/test/java/org/entur/example/web/WebLoggingMessageFormatTest.java @@ -7,9 +7,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -21,6 +22,7 @@ "entur.logging.request-response.format.server.message.host=false", "entur.logging.request-response.format.server.message.port=false" }) +@AutoConfigureTestRestTemplate public class WebLoggingMessageFormatTest { @LocalServerPort diff --git a/examples/gcp-web-without-test-artifacts-example/build.gradle b/examples/gcp-web-without-test-artifacts-example/build.gradle index 8def6231..f7008437 100644 --- a/examples/gcp-web-without-test-artifacts-example/build.gradle +++ b/examples/gcp-web-without-test-artifacts-example/build.gradle @@ -1,10 +1,10 @@ plugins { - id 'org.springframework.boot' version '3.5.7' + id 'org.springframework.boot' version '4.0.1' } test { useJUnitPlatform { - includeEngines 'junit-jupiter', 'junit-vintage' + includeEngines 'junit-jupiter' } } @@ -17,6 +17,8 @@ dependencies { implementation("org.springframework.boot:spring-boot-starter-web") testImplementation("org.springframework.boot:spring-boot-starter-test") + testImplementation("org.springframework.boot:spring-boot-restclient") + testImplementation("org.springframework.boot:spring-boot-resttestclient") // JUnit Jupiter API and TestEngine implementation testImplementation("org.junit.jupiter:junit-jupiter-api") diff --git a/examples/gcp-web-without-test-artifacts-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java b/examples/gcp-web-without-test-artifacts-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java index 04a96010..bed6c3b4 100644 --- a/examples/gcp-web-without-test-artifacts-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java +++ b/examples/gcp-web-without-test-artifacts-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java @@ -12,7 +12,7 @@ public class WebSecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http - .csrf().disable() + .csrf( (c) -> c.disable()) .authorizeHttpRequests((authz) -> authz .anyRequest().permitAll()); return http.build(); diff --git a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpBadRequestTest.java b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpBadRequestTest.java index 7d2f8be3..769647d4 100644 --- a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpBadRequestTest.java +++ b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpBadRequestTest.java @@ -3,9 +3,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -25,6 +26,7 @@ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @TestPropertySource(properties = {"entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.http.statusCode.equalOrHigherThan=400"}) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpBadRequestTest { @LocalServerPort diff --git a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1Test.java b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1Test.java index 9c4614fa..a5d22758 100644 --- a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1Test.java +++ b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound1Test.java @@ -3,9 +3,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -21,6 +22,7 @@ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @TestPropertySource(properties = {"entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.http.statusCode.equalOrHigherThan=400"}) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpNotFound1Test { @LocalServerPort diff --git a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound2Test.java b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound2Test.java index 348deda9..15a796b3 100644 --- a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound2Test.java +++ b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpNotFound2Test.java @@ -3,9 +3,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -22,6 +23,7 @@ */ @TestPropertySource(properties = {"entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.http.statusCode.equalOrHigherThan=400"}) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpNotFound2Test { @LocalServerPort diff --git a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelTest.java b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelTest.java index cefcc947..4a8ede64 100644 --- a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelTest.java +++ b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkHighLogLevelTest.java @@ -3,9 +3,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -24,6 +25,7 @@ "entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.logger.level=error", }) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpOkHighLogLevelTest { @LocalServerPort diff --git a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTest.java b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTest.java index d4c04aa7..8cb05668 100644 --- a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTest.java +++ b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTest.java @@ -3,9 +3,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -16,6 +17,7 @@ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @TestPropertySource(properties = {"entur.logging.http.ondemand.enabled=true", "entur.logging.http.ondemand.failure.http.statusCode.equalOrHigherThan=400"}) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpOkTest { @LocalServerPort diff --git a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTroubleshootingTest.java b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTroubleshootingTest.java index 27dc3ca0..e36c3414 100644 --- a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTroubleshootingTest.java +++ b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/OndemandWebLoggingHttpOkTroubleshootingTest.java @@ -3,9 +3,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.*; import org.springframework.test.context.TestPropertySource; @@ -19,6 +20,7 @@ "entur.logging.http.ondemand.failure.http.statusCode.equalOrHigherThan=400", "entur.logging.http.ondemand.troubleshoot.http.headers[0].name=X-DEBUG" }) +@AutoConfigureTestRestTemplate public class OndemandWebLoggingHttpOkTroubleshootingTest { @LocalServerPort diff --git a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java index 56ce801c..0839b853 100644 --- a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java +++ b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java @@ -5,14 +5,16 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class WebLoggingFormatTest { @LocalServerPort diff --git a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/WebLoggingMessageFormatTest.java b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/WebLoggingMessageFormatTest.java index a804db29..4ce02ec8 100644 --- a/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/WebLoggingMessageFormatTest.java +++ b/examples/gcp-web-without-test-artifacts-example/src/test/java/org/entur/example/web/WebLoggingMessageFormatTest.java @@ -3,9 +3,10 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -19,6 +20,7 @@ "entur.logging.request-response.format.server.message.host=false", "entur.logging.request-response.format.server.message.port=false" }) +@AutoConfigureTestRestTemplate public class WebLoggingMessageFormatTest { @LocalServerPort diff --git a/examples/gcp-web-without-test-or-ondemand-artifacts-example/build.gradle b/examples/gcp-web-without-test-or-ondemand-artifacts-example/build.gradle index 1ca24142..f1fdf86c 100644 --- a/examples/gcp-web-without-test-or-ondemand-artifacts-example/build.gradle +++ b/examples/gcp-web-without-test-or-ondemand-artifacts-example/build.gradle @@ -1,10 +1,10 @@ plugins { - id 'org.springframework.boot' version '3.5.7' + id 'org.springframework.boot' version '4.0.1' } test { useJUnitPlatform { - includeEngines 'junit-jupiter', 'junit-vintage' + includeEngines 'junit-jupiter' } } @@ -16,6 +16,8 @@ dependencies { implementation("org.springframework.boot:spring-boot-starter-web") testImplementation("org.springframework.boot:spring-boot-starter-test") + testImplementation("org.springframework.boot:spring-boot-restclient") + testImplementation("org.springframework.boot:spring-boot-resttestclient") // JUnit Jupiter API and TestEngine implementation testImplementation("org.junit.jupiter:junit-jupiter-api") diff --git a/examples/gcp-web-without-test-or-ondemand-artifacts-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java b/examples/gcp-web-without-test-or-ondemand-artifacts-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java index 04a96010..bed6c3b4 100644 --- a/examples/gcp-web-without-test-or-ondemand-artifacts-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java +++ b/examples/gcp-web-without-test-or-ondemand-artifacts-example/src/main/java/org/entur/example/web/config/WebSecurityConfig.java @@ -12,7 +12,7 @@ public class WebSecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http - .csrf().disable() + .csrf( (c) -> c.disable()) .authorizeHttpRequests((authz) -> authz .anyRequest().permitAll()); return http.build(); diff --git a/examples/gcp-web-without-test-or-ondemand-artifacts-example/src/test/java/org/entur/example/web/ErrorWebLoggingFormatTest.java b/examples/gcp-web-without-test-or-ondemand-artifacts-example/src/test/java/org/entur/example/web/ErrorWebLoggingFormatTest.java index ed1b57e7..9195bd53 100644 --- a/examples/gcp-web-without-test-or-ondemand-artifacts-example/src/test/java/org/entur/example/web/ErrorWebLoggingFormatTest.java +++ b/examples/gcp-web-without-test-or-ondemand-artifacts-example/src/test/java/org/entur/example/web/ErrorWebLoggingFormatTest.java @@ -3,15 +3,17 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class ErrorWebLoggingFormatTest { @Autowired diff --git a/examples/gcp-web-without-test-or-ondemand-artifacts-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java b/examples/gcp-web-without-test-or-ondemand-artifacts-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java index 45e4b0be..fbe7ae1b 100644 --- a/examples/gcp-web-without-test-or-ondemand-artifacts-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java +++ b/examples/gcp-web-without-test-or-ondemand-artifacts-example/src/test/java/org/entur/example/web/WebLoggingFormatTest.java @@ -5,14 +5,16 @@ import org.entur.example.web.rest.MyEntity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@AutoConfigureTestRestTemplate public class WebLoggingFormatTest { @Autowired diff --git a/gcp/README.md b/gcp/README.md index be62a5af..06b79f23 100644 --- a/gcp/README.md +++ b/gcp/README.md @@ -208,24 +208,24 @@ and ```xml no.entur.logging.cloud - spring-boot-starter-gcp-grpc-ecosystem + spring-boot-starter-gcp-grpc-spring ${cloud-logging.version} no.entur.logging.cloud - spring-boot-starter-gcp-grpc-ecosystem-test + spring-boot-starter-gcp-grpc-spring-test ${cloud-logging.version} test no.entur.logging.cloud - request-response-spring-boot-starter-gcp-grpc-ecosystem + request-response-spring-boot-starter-gcp-grpc-spring ${cloud-logging.version} no.entur.logging.cloud - request-response-spring-boot-starter-gcp-grpc-ecosystem-test + request-response-spring-boot-starter-gcp-grpc-spring-test ${cloud-logging.version} test @@ -285,11 +285,11 @@ ext { add ```groovy -implementation("no.entur.logging.cloud:spring-boot-starter-gcp-grpc-ecosystem:${cloudLoggingVersion}") -testImplementation("no.entur.logging.cloud:spring-boot-starter-gcp-grpc-ecosystem-test:${cloudLoggingVersion}") +implementation("no.entur.logging.cloud:spring-boot-starter-gcp-grpc-spring:${cloudLoggingVersion}") +testImplementation("no.entur.logging.cloud:spring-boot-starter-gcp-grpc-spring-test:${cloudLoggingVersion}") // request-response logging -implementation("no.entur.logging.cloud:request-response-spring-boot-starter-gcp-grpc-ecosystem:${cloudLoggingVersion}") -testImplementation("no.entur.logging.cloud:request-response-spring-boot-starter-gcp-grpc-ecosystem-test:${cloudLoggingVersion}") +implementation("no.entur.logging.cloud:request-response-spring-boot-starter-gcp-grpc-spring:${cloudLoggingVersion}") +testImplementation("no.entur.logging.cloud:request-response-spring-boot-starter-gcp-grpc-spring-test:${cloudLoggingVersion}") // on-demand logging support implementation("no.entur.logging.cloud:on-demand-spring-boot-starter-grpc:${cloudLoggingVersion}") // metrics diff --git a/gcp/logback-logstash-encoder-gcp/build.gradle b/gcp/logback-logstash-encoder-gcp/build.gradle index 135179b7..7f4e5b78 100644 --- a/gcp/logback-logstash-encoder-gcp/build.gradle +++ b/gcp/logback-logstash-encoder-gcp/build.gradle @@ -7,7 +7,7 @@ dependencies { api ("ch.qos.logback:logback-core") api ("net.logstash.logback:logstash-logback-encoder:${logbackLogstashVersion}") - api("com.fasterxml.jackson.core:jackson-core") + api("tools.jackson.core:jackson-core") } diff --git a/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/SimpleMdcJsonProvider.java b/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/SimpleMdcJsonProvider.java index 9555bf89..fd339072 100644 --- a/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/SimpleMdcJsonProvider.java +++ b/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/SimpleMdcJsonProvider.java @@ -1,7 +1,7 @@ package no.entur.logging.cloud.gcp.logback.logstash; import ch.qos.logback.classic.spi.ILoggingEvent; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import net.logstash.logback.composite.AbstractJsonProvider; import java.io.IOException; @@ -16,7 +16,7 @@ public class SimpleMdcJsonProvider extends AbstractJsonProvider { @Override - public void writeTo(JsonGenerator generator, ILoggingEvent event) throws IOException { + public void writeTo(JsonGenerator generator, ILoggingEvent event) { Map mdcProperties = event.getMDCPropertyMap(); if (mdcProperties != null && !mdcProperties.isEmpty()) { for (Map.Entry entry : mdcProperties.entrySet()) { @@ -25,7 +25,7 @@ public void writeTo(JsonGenerator generator, ILoggingEvent event) throws IOExcep if(key == null || value == null) { continue; } - generator.writeStringField(key, value); + generator.writeStringProperty(key, value); } } } diff --git a/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverLogSeverityJsonProvider.java b/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverLogSeverityJsonProvider.java index 2e7df4bd..79d53a16 100644 --- a/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverLogSeverityJsonProvider.java +++ b/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverLogSeverityJsonProvider.java @@ -2,7 +2,7 @@ import ch.qos.logback.classic.Level; import ch.qos.logback.classic.spi.ILoggingEvent; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import net.logstash.logback.composite.AbstractFieldJsonProvider; import net.logstash.logback.composite.FieldNamesAware; import net.logstash.logback.composite.JsonWritingUtils; @@ -77,7 +77,7 @@ public StackdriverLogSeverityJsonProvider() { } @Override - public void writeTo(JsonGenerator generator, ILoggingEvent event) throws IOException { + public void writeTo(JsonGenerator generator, ILoggingEvent event) { JsonWritingUtils.writeStringField(generator, getFieldName(), getSeverity(event).toString()); } diff --git a/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverLogstashEncoder.java b/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverLogstashEncoder.java index bb3f1afb..f1f8f83b 100644 --- a/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverLogstashEncoder.java +++ b/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverLogstashEncoder.java @@ -57,7 +57,7 @@ protected AbstractCompositeJsonFormatter createFormatter() { } loggingEventJsonProviders.addProvider(new StackdriverLogSeverityJsonProvider()); - loggingEventJsonProviders.addProvider(new StackdriverMessageJsonProvider()); + loggingEventJsonProviders.addProvider(new StackdriverMessageJsonProvider(formatter)); return formatter; } diff --git a/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverMessageJsonProvider.java b/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverMessageJsonProvider.java index e00fdbac..ec91ed70 100644 --- a/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverMessageJsonProvider.java +++ b/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverMessageJsonProvider.java @@ -1,9 +1,11 @@ package no.entur.logging.cloud.gcp.logback.logstash; +import ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter; +import ch.qos.logback.classic.pattern.ThrowableHandlingConverter; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.classic.spi.IThrowableProxy; -import ch.qos.logback.classic.spi.StackTraceElementProxy; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; +import net.logstash.logback.LogstashFormatter; import net.logstash.logback.composite.JsonWritingUtils; import net.logstash.logback.composite.loggingevent.MessageJsonProvider; @@ -11,69 +13,76 @@ public class StackdriverMessageJsonProvider extends MessageJsonProvider { + private final LogstashFormatter formatter; + private ThrowableHandlingConverter throwableConverter; + + public StackdriverMessageJsonProvider(LogstashFormatter formatter) { + this.formatter = formatter; + } + + @Override + public void start() { + super.start(); + throwableConverter = formatter.getThrowableConverter(); + if(throwableConverter == null) { + // this should never happen + throwableConverter = createThrowableConverter(); + } + + if(!throwableConverter.isStarted()) { + throwableConverter.start(); + } + } + + protected ThrowableHandlingConverter createThrowableConverter() { + ExtendedThrowableProxyConverter converter = new ExtendedThrowableProxyConverter(); + converter.setContext(getContext()); + return converter; + } + + @Override + public void stop() { + super.stop(); + if(throwableConverter != null) { + if(throwableConverter.isStarted()) { + throwableConverter.stop(); + } + } + } + @Override - public void writeTo(JsonGenerator generator, ILoggingEvent event) throws IOException { + public void writeTo(JsonGenerator generator, ILoggingEvent event) { IThrowableProxy throwableProxy = event.getThrowableProxy(); if (throwableProxy != null) { String formattedMessage = event.getFormattedMessage(); - String message = throwableProxy.getMessage(); - StringBuilder messageWithStackTrace = new StringBuilder(); - if(formattedMessage != null && !formattedMessage.isEmpty() && message != null && !message.isEmpty()) { - messageWithStackTrace.append(formattedMessage); - - if(Character.isLetterOrDigit(formattedMessage.charAt(formattedMessage.length() - 1))) { - messageWithStackTrace.append('.'); - } - - messageWithStackTrace.append(' '); - messageWithStackTrace.append(message); - messageWithStackTrace.append('\n'); - } else if(formattedMessage != null && !formattedMessage.isEmpty()) { - messageWithStackTrace.append(formattedMessage); - messageWithStackTrace.append('\n'); - } else if(message != null && !message.isEmpty()) { - messageWithStackTrace.append(message); - messageWithStackTrace.append('\n'); - } - writeStack(throwableProxy, "", messageWithStackTrace); + String stacktrace = throwableConverter.convert(event); - JsonWritingUtils.writeStringField(generator, getFieldName(), messageWithStackTrace.toString()); + boolean writeFormattedMessage = formattedMessage != null && !formattedMessage.isEmpty(); + boolean writeStacktrace = stacktrace != null && !stacktrace.isEmpty(); + + if(writeFormattedMessage && writeStacktrace) { + // stacktrace is on the form: + // "exception-name colon exception-message newline tab at x.y.z newline tab at a.b.c and so on" + // so add a space and potentially a dot between the log statement message and the first line of the + // formatted stacktrace + String message; + if (Character.isLetterOrDigit(formattedMessage.charAt(formattedMessage.length() - 1))) { + message = formattedMessage + ". " + stacktrace; + } else { + message = formattedMessage + ' ' + stacktrace; + } + JsonWritingUtils.writeStringField(generator, getFieldName(), message); + } else if (writeStacktrace) { + JsonWritingUtils.writeStringField(generator, getFieldName(), stacktrace); + } else if (writeFormattedMessage) { + JsonWritingUtils.writeStringField(generator, getFieldName(), formattedMessage); + } else { + super.writeTo(generator, event); + } } else { super.writeTo(generator, event); } } - - /** - * Format stack-trace - * - * @see https://github.com/GoogleCloudPlatform/google-cloud-java/tree/master/google-cloud-contrib/google-cloud-logging-logback - */ - static void writeStack(IThrowableProxy throwProxy, String prefix, StringBuilder payload) { - if (throwProxy == null) { - return; - } - payload - .append(prefix) - .append(throwProxy.getClassName()) - .append(": ") - .append(throwProxy.getMessage()) - .append('\n'); - StackTraceElementProxy[] trace = throwProxy.getStackTraceElementProxyArray(); - if (trace == null) { - trace = new StackTraceElementProxy[0]; - } - - int commonFrames = throwProxy.getCommonFrames(); - int printFrames = trace.length - commonFrames; - for (int i = 0; i < printFrames; i++) { - payload.append(" ").append(trace[i]).append('\n'); - } - if (commonFrames != 0) { - payload.append(" ... ").append(commonFrames).append(" common frames elided\n"); - } - - writeStack(throwProxy.getCause(), "caused by: ", payload); - } } diff --git a/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverOpenTelemetryTraceMdcJsonProvider.java b/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverOpenTelemetryTraceMdcJsonProvider.java index e27dd2a6..101fdf81 100644 --- a/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverOpenTelemetryTraceMdcJsonProvider.java +++ b/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverOpenTelemetryTraceMdcJsonProvider.java @@ -1,12 +1,8 @@ package no.entur.logging.cloud.gcp.logback.logstash; import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.core.spi.DeferredProcessingAware; -import com.fasterxml.jackson.core.JsonGenerator; -import net.logstash.logback.composite.AbstractFieldJsonProvider; +import tools.jackson.core.JsonGenerator; import net.logstash.logback.composite.AbstractJsonProvider; -import net.logstash.logback.composite.FieldNamesAware; -import net.logstash.logback.fieldnames.LogstashFieldNames; import java.io.IOException; import java.util.Map; @@ -20,12 +16,12 @@ public class StackdriverOpenTelemetryTraceMdcJsonProvider extends AbstractJsonProvider { @Override - public void writeTo(JsonGenerator generator, ILoggingEvent event) throws IOException { + public void writeTo(JsonGenerator generator, ILoggingEvent event) { Map mdcProperties = event.getMDCPropertyMap(); if (mdcProperties != null && !mdcProperties.isEmpty()) { String traceId = mdcProperties.get("traceId"); if(traceId != null) { - generator.writeStringField("trace", traceId); + generator.writeStringProperty("trace", traceId); } for (Map.Entry entry : mdcProperties.entrySet()) { String key = entry.getKey(); @@ -33,7 +29,7 @@ public void writeTo(JsonGenerator generator, ILoggingEvent event) throws IOExcep if(key == null || value == null) { continue; } - generator.writeStringField(key, value); + generator.writeStringProperty(key, value); } } } diff --git a/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverServiceContextJsonProvider.java b/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverServiceContextJsonProvider.java index 8a5d6017..65d439c5 100644 --- a/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverServiceContextJsonProvider.java +++ b/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverServiceContextJsonProvider.java @@ -1,7 +1,7 @@ package no.entur.logging.cloud.gcp.logback.logstash; import ch.qos.logback.classic.spi.ILoggingEvent; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import net.logstash.logback.composite.AbstractFieldJsonProvider; import net.logstash.logback.composite.FieldNamesAware; import net.logstash.logback.composite.JsonWritingUtils; @@ -72,9 +72,9 @@ public static String parseServiceNameFromHostname(String host) { } @Override - public void writeTo(JsonGenerator generator, ILoggingEvent event) throws IOException { + public void writeTo(JsonGenerator generator, ILoggingEvent event) { if(service != null) { - generator.writeObjectFieldStart(getFieldName()); + generator.writeObjectPropertyStart(getFieldName()); JsonWritingUtils.writeStringField(generator, "service", service); diff --git a/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverTimestampJsonProvider.java b/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverTimestampJsonProvider.java index 3ddae3e8..335bbdf8 100644 --- a/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverTimestampJsonProvider.java +++ b/gcp/logback-logstash-encoder-gcp/src/main/java/no/entur/logging/cloud/gcp/logback/logstash/StackdriverTimestampJsonProvider.java @@ -1,7 +1,7 @@ package no.entur.logging.cloud.gcp.logback.logstash; import ch.qos.logback.classic.spi.ILoggingEvent; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import net.logstash.logback.composite.AbstractJsonProvider; import net.logstash.logback.composite.JsonWritingUtils; @@ -20,10 +20,10 @@ public class StackdriverTimestampJsonProvider extends AbstractJsonProvider { @Override - public void writeTo(JsonGenerator generator, ILoggingEvent event) throws IOException { - generator.writeObjectFieldStart("timestamp"); - generator.writeNumberField("seconds", event.getTimeStamp() / 1000); - generator.writeNumberField("nanos", event.getNanoseconds()); + public void writeTo(JsonGenerator generator, ILoggingEvent event) { + generator.writeObjectPropertyStart("timestamp"); + generator.writeNumberProperty("seconds", event.getTimeStamp() / 1000); + generator.writeNumberProperty("nanos", event.getNanoseconds()); generator.writeEndObject(); } diff --git a/gcp/logback-logstash-encoder-gcp/src/main/resources/logback/logback-default-server.xml b/gcp/logback-logstash-encoder-gcp/src/main/resources/logback/logback-default-server.xml index 477fa121..a42d17fa 100644 --- a/gcp/logback-logstash-encoder-gcp/src/main/resources/logback/logback-default-server.xml +++ b/gcp/logback-logstash-encoder-gcp/src/main/resources/logback/logback-default-server.xml @@ -5,9 +5,13 @@ [ignore] [ignore] - - + + + + 24576 + 192 + \ No newline at end of file diff --git a/gcp/micrometer-gcp/src/main/java/no/entur/logging/cloud/gcp/micrometer/StackdriverLogbackMetrics.java b/gcp/micrometer-gcp/src/main/java/no/entur/logging/cloud/gcp/micrometer/StackdriverLogbackMetrics.java index 6edef34f..0260702a 100644 --- a/gcp/micrometer-gcp/src/main/java/no/entur/logging/cloud/gcp/micrometer/StackdriverLogbackMetrics.java +++ b/gcp/micrometer-gcp/src/main/java/no/entur/logging/cloud/gcp/micrometer/StackdriverLogbackMetrics.java @@ -2,8 +2,6 @@ import ch.qos.logback.classic.LoggerContext; import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.lang.NonNullApi; -import io.micrometer.core.lang.NonNullFields; import org.slf4j.LoggerFactory; import java.util.Map; @@ -15,8 +13,6 @@ * Logback driver with extra log levels. Originally copied from LogbackMetrics class in micrometer-core. * */ -@NonNullApi -@NonNullFields public class StackdriverLogbackMetrics extends io.micrometer.core.instrument.binder.logging.LogbackMetrics { // extend since there is not interface type protected final LoggerContext loggerContext; diff --git a/gcp/micrometer-gcp/src/main/java/no/entur/logging/cloud/gcp/micrometer/StackdriverMetricsTurboFilter.java b/gcp/micrometer-gcp/src/main/java/no/entur/logging/cloud/gcp/micrometer/StackdriverMetricsTurboFilter.java index 4fe6b56e..dc1b2d16 100644 --- a/gcp/micrometer-gcp/src/main/java/no/entur/logging/cloud/gcp/micrometer/StackdriverMetricsTurboFilter.java +++ b/gcp/micrometer-gcp/src/main/java/no/entur/logging/cloud/gcp/micrometer/StackdriverMetricsTurboFilter.java @@ -8,8 +8,6 @@ import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Tag; -import io.micrometer.core.lang.NonNullApi; -import io.micrometer.core.lang.NonNullFields; import no.entur.logging.cloud.api.DevOpsLevel; import no.entur.logging.cloud.api.DevOpsMarker; import no.entur.logging.cloud.micrometer.LoggingEventMetrics; @@ -17,8 +15,6 @@ import java.util.List; -@NonNullApi -@NonNullFields public class StackdriverMetricsTurboFilter extends TurboFilter implements LoggingEventMetrics { protected final Counter alertCounter; diff --git a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 5a80f128..00000000 --- a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -no.entur.logging.cloud.gcp.spring.gcp.grpc.ecosystem.test.RequestResponseGcpGrpcEcosystemTestAutoConfiguration \ No newline at end of file diff --git a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem/README.md b/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem/README.md deleted file mode 100644 index f56a700b..00000000 --- a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem/README.md +++ /dev/null @@ -1 +0,0 @@ -# request-response-logging for GCP + Ecosystem diff --git a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 7be9f525..00000000 --- a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -no.entur.logging.cloud.gcp.spring.gcp.grpc.ecosystem.RequestResponseGcpGrpcEcosystemAutoConfiguration \ No newline at end of file diff --git a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/build.gradle b/gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/build.gradle similarity index 71% rename from gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/build.gradle rename to gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/build.gradle index 8ea3508e..8b22ef47 100644 --- a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/build.gradle +++ b/gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/build.gradle @@ -1,14 +1,16 @@ dependencies { api project(":gcp:spring-boot-autoconfigure-gcp-test") - api project(':gcp:request-response-spring-boot-starter-gcp-grpc-ecosystem') - api project(':request-response:request-response-spring-boot-autoconfigure-grpc-ecosystem') + api project(':gcp:request-response-spring-boot-starter-gcp-grpc-spring') + api project(':request-response:request-response-spring-boot-autoconfigure-grpc-spring') - api ("org.entur.jackson:jackson-syntax-highlight:${jacksonSyntaxHighlightVersion}") + api("org.springframework.grpc:spring-grpc-server-spring-boot-starter:${springGrpcVersion}") + + api ("org.entur.jackson:jackson-tools-syntax-highlight:${jacksonSyntaxHighlightVersion}") api ("org.entur.logback-logstash-syntax-highlighting-decorators:logback-logstash-syntax-highlighting-decorators:${logbackLogstashSyntaxHighlightingDecoratorsVersion}") api ("net.logstash.logback:logstash-logback-encoder:${logbackLogstashVersion}") - api ("com.fasterxml.jackson.core:jackson-core") + api ("tools.jackson.core:jackson-core") api("org.slf4j:slf4j-api") api("org.springframework.boot:spring-boot-autoconfigure") diff --git a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem-test/src/main/java/no/entur/logging/cloud/azure/spring/grpc/ecosystem/test/RequestResponseAzureGrpcEcosystemTestAutoConfiguration.java b/gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/src/main/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/spring/test/RequestResponseGcpGrpcSpringTestAutoConfiguration.java similarity index 81% rename from azure/request-response-spring-boot-starter-azure-grpc-ecosystem-test/src/main/java/no/entur/logging/cloud/azure/spring/grpc/ecosystem/test/RequestResponseAzureGrpcEcosystemTestAutoConfiguration.java rename to gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/src/main/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/spring/test/RequestResponseGcpGrpcSpringTestAutoConfiguration.java index e613c04e..9d98cf47 100644 --- a/azure/request-response-spring-boot-starter-azure-grpc-ecosystem-test/src/main/java/no/entur/logging/cloud/azure/spring/grpc/ecosystem/test/RequestResponseAzureGrpcEcosystemTestAutoConfiguration.java +++ b/gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/src/main/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/spring/test/RequestResponseGcpGrpcSpringTestAutoConfiguration.java @@ -1,12 +1,13 @@ -package no.entur.logging.cloud.azure.spring.grpc.ecosystem.test; +package no.entur.logging.cloud.gcp.spring.gcp.grpc.spring.test; +import no.entur.logging.cloud.gcp.spring.gcp.grpc.spring.RequestResponseGcpGrpcSpringAutoConfiguration; import no.entur.logging.cloud.spring.rr.grpc.AbstractRequestResponseGrpcSinkAutoConfiguration; -import org.entur.jackson.jsh.AnsiSyntaxHighlight; -import org.entur.jackson.jsh.DefaultSyntaxHighlighter; import no.entur.logging.cloud.rr.grpc.GrpcSink; import no.entur.logging.cloud.rr.grpc.test.CompositeSink; import no.entur.logging.cloud.rr.grpc.test.PrettyPrintingLogLevelLogstashLogbackGrpcSink; import no.entur.logging.cloud.rr.grpc.test.PrettyPrintingGrpcSink; +import org.entur.jackson.tools.jsh.AnsiSyntaxHighlight; +import org.entur.jackson.tools.jsh.DefaultSyntaxHighlighter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.event.Level; @@ -16,11 +17,11 @@ import org.springframework.context.annotation.Configuration; @AutoConfigureBefore(value = { - no.entur.logging.cloud.azure.spring.grpc.ecosystem.RequestResponseAzureGrpcEcosystemAutoConfiguration.class, + RequestResponseGcpGrpcSpringAutoConfiguration.class, }) @Configuration -public class RequestResponseAzureGrpcEcosystemTestAutoConfiguration extends AbstractRequestResponseGrpcSinkAutoConfiguration { +public class RequestResponseGcpGrpcSpringTestAutoConfiguration extends AbstractRequestResponseGrpcSinkAutoConfiguration { @Bean @ConditionalOnMissingBean(GrpcSink.class) diff --git a/gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..1676f02d --- /dev/null +++ b/gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +no.entur.logging.cloud.gcp.spring.gcp.grpc.spring.test.RequestResponseGcpGrpcSpringTestAutoConfiguration \ No newline at end of file diff --git a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/src/test/java/no/entur/logging/cloud/spring/logbook/web/test/DemoApplication.java b/gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/src/test/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/spring/test/DemoApplication.java similarity index 81% rename from gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/src/test/java/no/entur/logging/cloud/spring/logbook/web/test/DemoApplication.java rename to gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/src/test/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/spring/test/DemoApplication.java index 5ad9589d..7df4033b 100644 --- a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/src/test/java/no/entur/logging/cloud/spring/logbook/web/test/DemoApplication.java +++ b/gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/src/test/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/spring/test/DemoApplication.java @@ -1,4 +1,4 @@ -package no.entur.logging.cloud.spring.logbook.web.test; +package no.entur.logging.cloud.gcp.spring.gcp.grpc.spring.test; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/src/test/java/no/entur/logging/cloud/spring/logbook/web/test/LoadContextLoggingTest.java b/gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/src/test/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/spring/test/LoadContextLoggingTest.java similarity index 98% rename from gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/src/test/java/no/entur/logging/cloud/spring/logbook/web/test/LoadContextLoggingTest.java rename to gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/src/test/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/spring/test/LoadContextLoggingTest.java index 100a870e..98b7d28a 100644 --- a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem-test/src/test/java/no/entur/logging/cloud/spring/logbook/web/test/LoadContextLoggingTest.java +++ b/gcp/request-response-spring-boot-starter-gcp-grpc-spring-test/src/test/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/spring/test/LoadContextLoggingTest.java @@ -1,4 +1,4 @@ -package no.entur.logging.cloud.spring.logbook.web.test; +package no.entur.logging.cloud.gcp.spring.gcp.grpc.spring.test; import no.entur.logging.cloud.api.DevOpsLogger; import no.entur.logging.cloud.api.DevOpsLoggerFactory; diff --git a/gcp/request-response-spring-boot-starter-gcp-grpc-spring/README.md b/gcp/request-response-spring-boot-starter-gcp-grpc-spring/README.md new file mode 100644 index 00000000..7ce08656 --- /dev/null +++ b/gcp/request-response-spring-boot-starter-gcp-grpc-spring/README.md @@ -0,0 +1 @@ +# request-response-logging for GCP + Spring GRPC diff --git a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem/build.gradle b/gcp/request-response-spring-boot-starter-gcp-grpc-spring/build.gradle similarity index 80% rename from gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem/build.gradle rename to gcp/request-response-spring-boot-starter-gcp-grpc-spring/build.gradle index 3b33f6bc..da707120 100644 --- a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem/build.gradle +++ b/gcp/request-response-spring-boot-starter-gcp-grpc-spring/build.gradle @@ -4,14 +4,14 @@ dependencies { api project(':api') api project(':gcp:logback-logstash-encoder-gcp') api project(':request-response:netty-grpc') - api project(':request-response:request-response-spring-boot-autoconfigure-grpc-ecosystem') + api project(':request-response:request-response-spring-boot-autoconfigure-grpc-spring') api ("org.slf4j:slf4j-api") api ("org.springframework.boot:spring-boot-starter") api ("org.springframework.boot:spring-boot-autoconfigure") api ("org.springframework.boot:spring-boot-starter-logging") - api("net.devh:grpc-server-spring-boot-starter:${ecosystemGrpcVersion}") + api("org.springframework.grpc:spring-grpc-server-spring-boot-starter:${springGrpcVersion}") testImplementation("org.springframework.boot:spring-boot-starter-test") } diff --git a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem/src/main/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/ecosystem/RequestResponseGcpGrpcEcosystemAutoConfiguration.java b/gcp/request-response-spring-boot-starter-gcp-grpc-spring/src/main/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/spring/RequestResponseGcpGrpcSpringAutoConfiguration.java similarity index 65% rename from gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem/src/main/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/ecosystem/RequestResponseGcpGrpcEcosystemAutoConfiguration.java rename to gcp/request-response-spring-boot-starter-gcp-grpc-spring/src/main/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/spring/RequestResponseGcpGrpcSpringAutoConfiguration.java index 90470849..1bb8003b 100644 --- a/gcp/request-response-spring-boot-starter-gcp-grpc-ecosystem/src/main/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/ecosystem/RequestResponseGcpGrpcEcosystemAutoConfiguration.java +++ b/gcp/request-response-spring-boot-starter-gcp-grpc-spring/src/main/java/no/entur/logging/cloud/gcp/spring/gcp/grpc/spring/RequestResponseGcpGrpcSpringAutoConfiguration.java @@ -1,17 +1,14 @@ -package no.entur.logging.cloud.gcp.spring.gcp.grpc.ecosystem; +package no.entur.logging.cloud.gcp.spring.gcp.grpc.spring; -import no.entur.logging.cloud.spring.grpc.ecosystem.RequestResponseGrpcEcosystemAutoConfiguration; -import no.entur.logging.cloud.spring.rr.grpc.AbstractRequestResponseGrpcSinkAutoConfiguration; import no.entur.logging.cloud.spring.rr.grpc.GrpcLoggingCloudProperties; import no.entur.logging.cloud.spring.rr.grpc.RequestResponseGrpcAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; @Configuration @AutoConfigureBefore(RequestResponseGrpcAutoConfiguration.class) -public class RequestResponseGcpGrpcEcosystemAutoConfiguration { +public class RequestResponseGcpGrpcSpringAutoConfiguration { @Bean public GrpcLoggingCloudProperties grpcLoggingCloudProperties() { diff --git a/gcp/request-response-spring-boot-starter-gcp-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/gcp/request-response-spring-boot-starter-gcp-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..9c07902b --- /dev/null +++ b/gcp/request-response-spring-boot-starter-gcp-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +no.entur.logging.cloud.gcp.spring.gcp.grpc.spring.RequestResponseGcpGrpcSpringAutoConfiguration \ No newline at end of file diff --git a/gcp/spring-boot-autoconfigure-gcp-test/build.gradle b/gcp/spring-boot-autoconfigure-gcp-test/build.gradle index e63feb39..498d1407 100644 --- a/gcp/spring-boot-autoconfigure-gcp-test/build.gradle +++ b/gcp/spring-boot-autoconfigure-gcp-test/build.gradle @@ -15,7 +15,7 @@ dependencies { api("org.springframework.boot:spring-boot-starter-logging") api("org.springframework.boot:spring-boot-autoconfigure") - api ("org.entur.jackson:jackson-syntax-highlight:${jacksonSyntaxHighlightVersion}") + api ("org.entur.jackson:jackson-tools-syntax-highlight:${jacksonSyntaxHighlightVersion}") api ("org.entur.logback-logstash-syntax-highlighting-decorators:logback-logstash-syntax-highlighting-decorators:${logbackLogstashSyntaxHighlightingDecoratorsVersion}") annotationProcessor "org.springframework.boot:spring-boot-configuration-processor:${springBootVersion}" diff --git a/gcp/spring-boot-autoconfigure-gcp-test/src/main/java/no/entur/logging/cloud/gcp/spring/test/LogSeveritySyntaxHighlighter.java b/gcp/spring-boot-autoconfigure-gcp-test/src/main/java/no/entur/logging/cloud/gcp/spring/test/LogSeveritySyntaxHighlighter.java index 3cadfb79..55d0b6ac 100644 --- a/gcp/spring-boot-autoconfigure-gcp-test/src/main/java/no/entur/logging/cloud/gcp/spring/test/LogSeveritySyntaxHighlighter.java +++ b/gcp/spring-boot-autoconfigure-gcp-test/src/main/java/no/entur/logging/cloud/gcp/spring/test/LogSeveritySyntaxHighlighter.java @@ -1,8 +1,8 @@ package no.entur.logging.cloud.gcp.spring.test; import org.entur.decorators.syntaxhighlight.DelegateSyntaxHighlighter; -import org.entur.jackson.jsh.AnsiSyntaxHighlight; -import org.entur.jackson.jsh.SyntaxHighlighter; +import org.entur.jackson.tools.jsh.AnsiSyntaxHighlight; +import org.entur.jackson.tools.jsh.SyntaxHighlighter; public class LogSeveritySyntaxHighlighter extends DelegateSyntaxHighlighter { diff --git a/gcp/spring-boot-autoconfigure-gcp-test/src/main/java/no/entur/logging/cloud/gcp/spring/test/LogSeveritySyntaxHighlighterFactory.java b/gcp/spring-boot-autoconfigure-gcp-test/src/main/java/no/entur/logging/cloud/gcp/spring/test/LogSeveritySyntaxHighlighterFactory.java index d38360c6..a2ef2ca4 100644 --- a/gcp/spring-boot-autoconfigure-gcp-test/src/main/java/no/entur/logging/cloud/gcp/spring/test/LogSeveritySyntaxHighlighterFactory.java +++ b/gcp/spring-boot-autoconfigure-gcp-test/src/main/java/no/entur/logging/cloud/gcp/spring/test/LogSeveritySyntaxHighlighterFactory.java @@ -1,10 +1,10 @@ package no.entur.logging.cloud.gcp.spring.test; -import com.fasterxml.jackson.core.JsonGenerator; +import org.entur.jackson.tools.jsh.AnsiSyntaxHighlight; +import org.entur.jackson.tools.jsh.DefaultSyntaxHighlighter; +import org.entur.jackson.tools.jsh.SyntaxHighlighter; +import tools.jackson.core.JsonGenerator; import org.entur.decorators.factory.ConfigurableSyntaxHighlighterFactory; -import org.entur.jackson.jsh.AnsiSyntaxHighlight; -import org.entur.jackson.jsh.DefaultSyntaxHighlighter; -import org.entur.jackson.jsh.SyntaxHighlighter; public class LogSeveritySyntaxHighlighterFactory extends ConfigurableSyntaxHighlighterFactory { @@ -74,9 +74,9 @@ public LogSeveritySyntaxHighlighterFactory() { } @Override - public SyntaxHighlighter createSyntaxHighlighter(JsonGenerator generator) { + public SyntaxHighlighter createSyntaxHighlighter() { if(cachedSyntaxHighlighter == null) { - cachedSyntaxHighlighter = super.createSyntaxHighlighter(generator); + cachedSyntaxHighlighter = super.createSyntaxHighlighter(); } return new LogSeveritySyntaxHighlighter(cachedSyntaxHighlighter, severity.defaultValue, severity.debug, severity.info, severity.warning, severity.error, severity.critical, severity.alert, severity.emergency, loggerName, message); } diff --git a/gcp/spring-boot-autoconfigure-gcp-test/src/main/resources/logback/logback-spring-test.xml b/gcp/spring-boot-autoconfigure-gcp-test/src/main/resources/logback/logback-spring-test.xml index 359bb798..4331decc 100644 --- a/gcp/spring-boot-autoconfigure-gcp-test/src/main/resources/logback/logback-spring-test.xml +++ b/gcp/spring-boot-autoconfigure-gcp-test/src/main/resources/logback/logback-spring-test.xml @@ -3,7 +3,7 @@ - + ${CONSOLE_LOG_THRESHOLD} @@ -22,7 +22,7 @@ TODO this seems to add an extract space after the last newline, but as this is just the human readable format, this is not important. --> - + green @@ -30,7 +30,8 @@ blue magenta - + + @@ -40,6 +41,11 @@ + + + 24576 + 192 + diff --git a/gcp/spring-boot-autoconfigure-gcp-test/src/main/resources/logback/spring-defaults-test.xml b/gcp/spring-boot-autoconfigure-gcp-test/src/main/resources/logback/spring-defaults-test.xml index 6e8ca452..a02133d6 100644 --- a/gcp/spring-boot-autoconfigure-gcp-test/src/main/resources/logback/spring-defaults-test.xml +++ b/gcp/spring-boot-autoconfigure-gcp-test/src/main/resources/logback/spring-defaults-test.xml @@ -6,13 +6,19 @@ Default logback configuration provided for import by spring, modified to give me - date and time zone - pid - application name + - stacktrace coloring of selected packages --> + + + + + - + diff --git a/gcp/spring-boot-starter-gcp-grpc-ecosystem/src/main/java/no/entur/logging/cloud/gcp/spring/grpc/ecosystem/EcosystemGrpcLoggingAutoConfiguration.java b/gcp/spring-boot-starter-gcp-grpc-ecosystem/src/main/java/no/entur/logging/cloud/gcp/spring/grpc/ecosystem/EcosystemGrpcLoggingAutoConfiguration.java deleted file mode 100644 index fba26387..00000000 --- a/gcp/spring-boot-starter-gcp-grpc-ecosystem/src/main/java/no/entur/logging/cloud/gcp/spring/grpc/ecosystem/EcosystemGrpcLoggingAutoConfiguration.java +++ /dev/null @@ -1,10 +0,0 @@ -package no.entur.logging.cloud.gcp.spring.grpc.ecosystem; - -import org.springframework.context.annotation.Configuration; - -@Configuration -public class EcosystemGrpcLoggingAutoConfiguration { - - // error handlers - -} diff --git a/gcp/spring-boot-starter-gcp-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/gcp/spring-boot-starter-gcp-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index feb60d67..00000000 --- a/gcp/spring-boot-starter-gcp-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -no.entur.logging.cloud.gcp.spring.grpc.ecosystem.EcosystemGrpcLoggingAutoConfiguration \ No newline at end of file diff --git a/gcp/spring-boot-starter-gcp-grpc-ecosystem-test/build.gradle b/gcp/spring-boot-starter-gcp-grpc-spring-test/build.gradle similarity index 100% rename from gcp/spring-boot-starter-gcp-grpc-ecosystem-test/build.gradle rename to gcp/spring-boot-starter-gcp-grpc-spring-test/build.gradle diff --git a/gcp/spring-boot-starter-gcp-grpc-ecosystem/build.gradle b/gcp/spring-boot-starter-gcp-grpc-spring/build.gradle similarity index 90% rename from gcp/spring-boot-starter-gcp-grpc-ecosystem/build.gradle rename to gcp/spring-boot-starter-gcp-grpc-spring/build.gradle index 10b1c66d..8f368792 100644 --- a/gcp/spring-boot-starter-gcp-grpc-ecosystem/build.gradle +++ b/gcp/spring-boot-starter-gcp-grpc-spring/build.gradle @@ -18,7 +18,7 @@ dependencies { api("org.springframework.boot:spring-boot-autoconfigure") api("org.springframework.boot:spring-boot-starter-logging") - api("net.devh:grpc-server-spring-boot-starter:${ecosystemGrpcVersion}") + api("org.springframework.grpc:spring-grpc-server-spring-boot-starter:${springGrpcVersion}") api "io.grpc:grpc-netty:${grpcNettyVersion}" diff --git a/gcp/spring-boot-starter-gcp-grpc-spring/src/main/java/no/entur/logging/cloud/gcp/spring/grpc/spring/SpringGrpcLoggingAutoConfiguration.java b/gcp/spring-boot-starter-gcp-grpc-spring/src/main/java/no/entur/logging/cloud/gcp/spring/grpc/spring/SpringGrpcLoggingAutoConfiguration.java new file mode 100644 index 00000000..ed835e0b --- /dev/null +++ b/gcp/spring-boot-starter-gcp-grpc-spring/src/main/java/no/entur/logging/cloud/gcp/spring/grpc/spring/SpringGrpcLoggingAutoConfiguration.java @@ -0,0 +1,10 @@ +package no.entur.logging.cloud.gcp.spring.grpc.spring; + +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SpringGrpcLoggingAutoConfiguration { + + // error handlers + +} diff --git a/gcp/spring-boot-starter-gcp-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/gcp/spring-boot-starter-gcp-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..980cb44e --- /dev/null +++ b/gcp/spring-boot-starter-gcp-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +no.entur.logging.cloud.gcp.spring.grpc.spring.SpringGrpcLoggingAutoConfiguration \ No newline at end of file diff --git a/gcp/spring-boot-starter-gcp-web-test/src/test/java/no/entur/logging/cloud/gcp/spring/web/test/LoadContextLoggingTest.java b/gcp/spring-boot-starter-gcp-web-test/src/test/java/no/entur/logging/cloud/gcp/spring/web/test/LoadContextLoggingTest.java index 146e14bc..c5b9acc6 100644 --- a/gcp/spring-boot-starter-gcp-web-test/src/test/java/no/entur/logging/cloud/gcp/spring/web/test/LoadContextLoggingTest.java +++ b/gcp/spring-boot-starter-gcp-web-test/src/test/java/no/entur/logging/cloud/gcp/spring/web/test/LoadContextLoggingTest.java @@ -11,6 +11,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.io.IOException; @@ -18,7 +19,9 @@ @ExtendWith(SpringExtension.class) @SpringBootTest(webEnvironment = WebEnvironment.NONE) @DirtiesContext - +@TestPropertySource(properties = { + "entur.logging.test.format.stacktrace.highlight=no.entur,org.entur", +}) @EnableAutoConfiguration public class LoadContextLoggingTest { @@ -28,9 +31,9 @@ public class LoadContextLoggingTest { public void testHumanReadablePlain() { CompositeConsoleOutputControl.useHumanReadablePlainEncoder(); - LOGGER.trace("Test trace message"); - LOGGER.debug("Test debug message"); - LOGGER.info("Test info message"); + LOGGER.trace("Test trace message", new IOException("Trace exception")); + LOGGER.debug("Test debug message", new IOException("Trace exception")); + LOGGER.info("Test info message", new IOException("Trace exception")); LOGGER.warn("Test warn message"); LOGGER.error("Test error message"); diff --git a/gcp/spring-boot-starter-gcp-web/src/test/java/no/entur/logging/cloud/gcp/spring/web/LoadContextLoggingTest.java b/gcp/spring-boot-starter-gcp-web/src/test/java/no/entur/logging/cloud/gcp/spring/web/LoadContextLoggingTest.java index 7a25f53b..09d45df9 100644 --- a/gcp/spring-boot-starter-gcp-web/src/test/java/no/entur/logging/cloud/gcp/spring/web/LoadContextLoggingTest.java +++ b/gcp/spring-boot-starter-gcp-web/src/test/java/no/entur/logging/cloud/gcp/spring/web/LoadContextLoggingTest.java @@ -30,4 +30,19 @@ public void testMachineReadableJson() throws IOException { LOGGER.errorWakeMeUpRightNow("Test error wake me up right now message"); } + @Test + public void testMachineReadableJsonWithException() throws IOException { + IOException e = new IOException("Something went wrong"); + + LOGGER.trace("Test trace message with exception", e); + LOGGER.debug("Test debug message with exception", e); + LOGGER.info("Test info message with exception", e); + LOGGER.warn("Test warn message with exception", e); + LOGGER.error("Test error message with exception", e); + + LOGGER.errorTellMeTomorrow("Test error tell me tomorrow message with exception", e); + LOGGER.errorInterruptMyDinner("Test error interrupt my dinner message with exception", e); + LOGGER.errorWakeMeUpRightNow("Test error wake me up right now message with exception", e); + } + } diff --git a/guides/gRPC.md b/guides/gRPC.md index 5030dd39..0e8bdb4f 100644 --- a/guides/gRPC.md +++ b/guides/gRPC.md @@ -56,11 +56,11 @@ Add the spring-boot-starter artifact coordinates to your project. ```xml no.entur.logging.cloud - spring-boot-starter-gcp-grpc-ecosystem + spring-boot-starter-gcp-grpc-spring no.entur.logging.cloud - spring-boot-starter-gcp-grpc-ecosystem-test + spring-boot-starter-gcp-grpc-spring-test test ``` @@ -73,8 +73,8 @@ or Gradle Spring Boot Starter coordinates ```groovy -implementation ("no.entur.logging.cloud:spring-boot-starter-gcp-grpc-ecosystem") -testImplementation ("no.entur.logging.cloud:spring-boot-starter-gcp-grpc-ecosystem-test") +implementation ("no.entur.logging.cloud:spring-boot-starter-gcp-grpc-spring") +testImplementation ("no.entur.logging.cloud:spring-boot-starter-gcp-grpc-spring-test") ``` @@ -114,11 +114,11 @@ Import the request-response Spring Boot starters: ```xml no.entur.logging.cloud - request-response-spring-boot-starter-gcp-grpc-ecosystem + request-response-spring-boot-starter-gcp-grpc-spring no.entur.logging.cloud - request-response-spring-boot-starter-gcp-grpc-ecosystem-test + request-response-spring-boot-starter-gcp-grpc-spring-test test ``` @@ -131,8 +131,8 @@ or Gradle Spring Boot Starter coordinates ```groovy -implementation ("no.entur.logging.cloud:request-response-spring-boot-starter-gcp-grpc-ecosystem") -testImplementation ("no.entur.logging.cloud:request-response-spring-boot-starter-gcp-grpc-ecosystem-test") +implementation ("no.entur.logging.cloud:request-response-spring-boot-starter-gcp-grpc-spring") +testImplementation ("no.entur.logging.cloud:request-response-spring-boot-starter-gcp-grpc-spring-test") ``` @@ -227,8 +227,8 @@ For 'classic' one-line log output when running a server locally, additionally ad ```groovy tasks.register("logPlainly") { dependencies { - implementation("no.entur.logging.cloud:request-response-spring-boot-starter-gcp-grpc-ecosystem-test") - implementation("no.entur.logging.cloud:spring-boot-starter-gcp-grpc-ecosystem-test") + implementation("no.entur.logging.cloud:request-response-spring-boot-starter-gcp-grpc-spring-test") + implementation("no.entur.logging.cloud:spring-boot-starter-gcp-grpc-spring-test") } } diff --git a/guides/web.md b/guides/web.md index 023e96c1..e26b2379 100644 --- a/guides/web.md +++ b/guides/web.md @@ -122,6 +122,13 @@ testImplementation ("no.entur.logging.cloud:request-response-spring-boot-starter ``` +Please note: + + * Logging invalid JSON or making too long log statements might have unexpected consequences for fluentbit handling in GCP kubernetes. + * For request-response-logging, this library assumes that locally produced JSON has valid syntax and is without pretty-printing. + * This assumption is made so to avoid the processing overhead of unnecessarily parsing JSON documents known to be valid. + * If this assumption for some reason does not hold, use a BodyFilter to compensate. + Some Logbook excludes ([actuator, openapi](https://github.com/entur/cloud-logging/blob/main/request-response/logbook-spring-boot-autoconfigure/src/main/java/no/entur/logging/cloud/spring/logbook/LogbookLoggingAutoConfiguration.java)) are included by default. Add more using ```yml @@ -288,7 +295,7 @@ entur.logging.http.ondemand.troubleshoot.level=debug entur.logging.http.ondemand.troubleshoot.http.headers[0].name=x-debug-this-request ``` -which allows for additional logging in the precense of certain HTTP headers. +which allows for additional logging in the presence of certain HTTP headers. ### Toggle log output-format during testing Toggling between output modes in a unit test: diff --git a/micrometer/src/main/java/no/entur/logging/cloud/micrometer/DevOpsLogbackMetrics.java b/micrometer/src/main/java/no/entur/logging/cloud/micrometer/DevOpsLogbackMetrics.java index 88de678f..5c9647a8 100644 --- a/micrometer/src/main/java/no/entur/logging/cloud/micrometer/DevOpsLogbackMetrics.java +++ b/micrometer/src/main/java/no/entur/logging/cloud/micrometer/DevOpsLogbackMetrics.java @@ -2,8 +2,6 @@ import ch.qos.logback.classic.LoggerContext; import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.lang.NonNullApi; -import io.micrometer.core.lang.NonNullFields; import org.slf4j.LoggerFactory; import java.util.Map; @@ -15,8 +13,6 @@ * Logback driver with extra log levels. Originally copied from LogbackMetrics class in micrometer-core. * */ -@NonNullApi -@NonNullFields public class DevOpsLogbackMetrics extends io.micrometer.core.instrument.binder.logging.LogbackMetrics { // extend since there is no interface type private final LoggerContext loggerContext; private final Map metricsTurboFilters = new ConcurrentHashMap<>(); diff --git a/micrometer/src/main/java/no/entur/logging/cloud/micrometer/DevOpsMetricsTurboFilter.java b/micrometer/src/main/java/no/entur/logging/cloud/micrometer/DevOpsMetricsTurboFilter.java index 577184c2..eac24328 100644 --- a/micrometer/src/main/java/no/entur/logging/cloud/micrometer/DevOpsMetricsTurboFilter.java +++ b/micrometer/src/main/java/no/entur/logging/cloud/micrometer/DevOpsMetricsTurboFilter.java @@ -8,16 +8,12 @@ import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Tag; -import io.micrometer.core.lang.NonNullApi; -import io.micrometer.core.lang.NonNullFields; import no.entur.logging.cloud.api.DevOpsLevel; import no.entur.logging.cloud.api.DevOpsMarker; import org.slf4j.Marker; import java.util.List; -@NonNullApi -@NonNullFields public class DevOpsMetricsTurboFilter extends TurboFilter implements LoggingEventMetrics { protected final Counter errorWakeMeUpRightNowCounter; diff --git a/on-demand/on-demand-spring-boot-starter-grpc/src/main/java/no/entur/logging/cloud/spring/ondemand/grpc/properties/OndemandProperties.java b/on-demand/on-demand-spring-boot-starter-grpc/src/main/java/no/entur/logging/cloud/spring/ondemand/grpc/properties/OndemandProperties.java index 7d08e0df..bd375167 100644 --- a/on-demand/on-demand-spring-boot-starter-grpc/src/main/java/no/entur/logging/cloud/spring/ondemand/grpc/properties/OndemandProperties.java +++ b/on-demand/on-demand-spring-boot-starter-grpc/src/main/java/no/entur/logging/cloud/spring/ondemand/grpc/properties/OndemandProperties.java @@ -7,12 +7,12 @@ import java.util.ArrayList; import java.util.List; -@ConfigurationProperties(prefix = "no.entur.logging.grpc.ondemand") +@ConfigurationProperties(prefix = "entur.logging.grpc.ondemand") public class OndemandProperties { private boolean enabled; - private int interceptorOrder = Ordered.HIGHEST_PRECEDENCE; + private int interceptorOrder = 100; private OndemandSuccess success = new OndemandSuccess(); diff --git a/on-demand/on-demand-spring-boot-starter-grpc/src/main/java/no/entur/logging/cloud/spring/ondemand/grpc/scope/GrpcLoggingScopeContextInterceptor.java b/on-demand/on-demand-spring-boot-starter-grpc/src/main/java/no/entur/logging/cloud/spring/ondemand/grpc/scope/GrpcLoggingScopeContextInterceptor.java index c9f531fd..c84bc90f 100644 --- a/on-demand/on-demand-spring-boot-starter-grpc/src/main/java/no/entur/logging/cloud/spring/ondemand/grpc/scope/GrpcLoggingScopeContextInterceptor.java +++ b/on-demand/on-demand-spring-boot-starter-grpc/src/main/java/no/entur/logging/cloud/spring/ondemand/grpc/scope/GrpcLoggingScopeContextInterceptor.java @@ -30,7 +30,7 @@ public static Builder newBuilder() { public static class Builder { - private int order = Ordered.HIGHEST_PRECEDENCE; + private int order = 100; private GrpcLoggingScopeFilters filters; diff --git a/on-demand/on-demand-spring-boot-starter-web/src/main/java/no/entur/logging/cloud/spring/ondemand/web/GcpWebOndemandLoggingAutoConfiguration.java b/on-demand/on-demand-spring-boot-starter-web/src/main/java/no/entur/logging/cloud/spring/ondemand/web/GcpWebOndemandLoggingAutoConfiguration.java index a675e01d..5834f2d2 100644 --- a/on-demand/on-demand-spring-boot-starter-web/src/main/java/no/entur/logging/cloud/spring/ondemand/web/GcpWebOndemandLoggingAutoConfiguration.java +++ b/on-demand/on-demand-spring-boot-starter-web/src/main/java/no/entur/logging/cloud/spring/ondemand/web/GcpWebOndemandLoggingAutoConfiguration.java @@ -23,7 +23,7 @@ import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher; import org.springframework.security.web.util.matcher.RequestMatcher; import java.time.Duration; @@ -86,7 +86,7 @@ public FilterRegistrationBean ondemandFilter() { continue; } HttpLoggingScopeFilter filter = toFilter(path.getMatcher(), path.getSuccess(), path.getFailure(), path.getTroubleshoot()); - RequestMatcher requestMatcher = AntPathRequestMatcher.antMatcher(path.getMatcher()); + RequestMatcher requestMatcher = PathPatternRequestMatcher.pathPattern(path.getMatcher()); filters.addFilter(requestMatcher, filter); } diff --git a/request-response/logbook-filter/build.gradle b/request-response/logbook-filter/build.gradle index c67351c8..9b21417e 100644 --- a/request-response/logbook-filter/build.gradle +++ b/request-response/logbook-filter/build.gradle @@ -4,8 +4,8 @@ dependencies { api("org.zalando:logbook-api:${logbookVersion}") api("org.zalando:logbook-api:${logbookVersion}") - api("com.fasterxml.jackson.core:jackson-core") - api("com.fasterxml.jackson.core:jackson-databind") + api("tools.jackson.core:jackson-core") + api("tools.jackson.core:jackson-databind") api "commons-io:commons-io:${commonsIoVersion}" // JUnit Jupiter API and TestEngine implementation diff --git a/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/filter/JsonMaxBodySizeFilter.java b/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/filter/JsonMaxBodySizeFilter.java index 2fcf68a8..6cdf7318 100644 --- a/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/filter/JsonMaxBodySizeFilter.java +++ b/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/filter/JsonMaxBodySizeFilter.java @@ -1,15 +1,13 @@ package no.entur.logging.cloud.logbook.filter; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonStreamContext; -import com.fasterxml.jackson.core.JsonToken; -import com.fasterxml.jackson.databind.MappingJsonFactory; -import no.entur.logging.cloud.logbook.util.MaxSizeJsonFilter; +import tools.jackson.core.JsonGenerator; +import tools.jackson.core.JsonParser; +import tools.jackson.core.JsonToken; +import tools.jackson.databind.json.JsonMapper; import org.apache.commons.io.output.StringBuilderWriter; import org.zalando.logbook.BodyFilter; import org.zalando.logbook.ContentType; +import no.entur.logging.cloud.logbook.util.MaxSizeJsonFilter; import java.io.IOException; import java.util.function.LongSupplier; @@ -34,7 +32,9 @@ public static JsonMaxBodySizeFilter newInstance(int maxBodySize) { public JsonMaxBodySizeFilter(int maxBodySize) { this.maxBodySize = maxBodySize; - this.maxBodyFilter = new MaxSizeJsonFilter(maxBodySize, new MappingJsonFactory()); + + JsonMapper mapper = JsonMapper.builder().build(); + this.maxBodyFilter = new MaxSizeJsonFilter(maxBodySize, mapper); } @Override diff --git a/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/filter/JsonMaxValueLengthBodyFilter.java b/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/filter/JsonMaxValueLengthBodyFilter.java index 32a5b3a7..9ec69d9f 100644 --- a/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/filter/JsonMaxValueLengthBodyFilter.java +++ b/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/filter/JsonMaxValueLengthBodyFilter.java @@ -1,13 +1,11 @@ package no.entur.logging.cloud.logbook.filter; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonToken; -import com.fasterxml.jackson.databind.MappingJsonFactory; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.JsonGenerator; import org.zalando.logbook.BodyFilter; import org.zalando.logbook.ContentType; +import tools.jackson.core.JsonParser; +import tools.jackson.core.JsonToken; +import tools.jackson.databind.json.JsonMapper; import java.io.StringWriter; import java.util.function.Predicate; @@ -26,11 +24,11 @@ public static JsonMaxValueLengthBodyFilter newInstance(int maxFieldLength) { return new JsonMaxValueLengthBodyFilter(maxFieldLength); } - private JsonFactory factory; + private JsonMapper mapper; public JsonMaxValueLengthBodyFilter(int maxFieldLength) { this.maxFieldLength = maxFieldLength; - this.factory = new MappingJsonFactory(); + this.mapper = JsonMapper.builder().build(); } @Override @@ -40,9 +38,9 @@ public String filter(String contentType, String body) { public String filter(final String body) { try ( - final JsonParser parser = factory.createParser(body); + final JsonParser parser = mapper.createParser(body); StringWriter writer = new StringWriter(body.length()); - JsonGenerator generator = factory.createGenerator(writer); + JsonGenerator generator = mapper.createGenerator(writer); ) { JsonToken nextToken; @@ -50,9 +48,9 @@ public String filter(final String body) { if (nextToken == JsonToken.VALUE_STRING) { String valueAsString = parser.getValueAsString(); if(valueAsString.length() > maxFieldLength) { - generator.writeObject(valueAsString.substring(0, maxFieldLength)+"[filtered by logger]"); + generator.writePOJO(valueAsString.substring(0, maxFieldLength)+"[filtered by logger]"); } else { - generator.writeObject(valueAsString); + generator.writePOJO(valueAsString); } } else { diff --git a/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/util/JsonValidator.java b/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/util/JsonValidator.java index 70ebac73..b6c100bd 100644 --- a/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/util/JsonValidator.java +++ b/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/util/JsonValidator.java @@ -1,20 +1,20 @@ package no.entur.logging.cloud.logbook.util; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonParser; +import tools.jackson.core.JsonParser; +import tools.jackson.databind.json.JsonMapper; import java.io.StringReader; public class JsonValidator { - private final JsonFactory jsonFactory; + private final JsonMapper jsonMapper; - public JsonValidator(JsonFactory jsonFactory) { - this.jsonFactory = jsonFactory; + public JsonValidator(JsonMapper jsonMapper) { + this.jsonMapper = jsonMapper; } public boolean isWellformedJson(String input) { - try (JsonParser parser = jsonFactory.createParser(new StringReader(input))) { + try (JsonParser parser = jsonMapper.createParser(new StringReader(input))) { while(parser.nextToken() != null); } catch(Exception e) { return false; diff --git a/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/util/MaxSizeJsonFilter.java b/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/util/MaxSizeJsonFilter.java index 4f4be0d2..861c152b 100644 --- a/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/util/MaxSizeJsonFilter.java +++ b/request-response/logbook-filter/src/main/java/no/entur/logging/cloud/logbook/util/MaxSizeJsonFilter.java @@ -1,7 +1,11 @@ package no.entur.logging.cloud.logbook.util; -import com.fasterxml.jackson.core.*; import org.apache.commons.io.output.StringBuilderWriter; +import tools.jackson.core.JsonGenerator; +import tools.jackson.core.JsonParser; +import tools.jackson.core.JsonToken; +import tools.jackson.core.TokenStreamContext; +import tools.jackson.databind.json.JsonMapper; import java.io.IOException; import java.util.function.LongSupplier; @@ -15,26 +19,26 @@ public class MaxSizeJsonFilter { - public static MaxSizeJsonFilter newInstance(int maxBodySize, JsonFactory jsonFactory) { - return new MaxSizeJsonFilter(maxBodySize, jsonFactory); + public static MaxSizeJsonFilter newInstance(int maxBodySize, JsonMapper jsonMapper) { + return new MaxSizeJsonFilter(maxBodySize, jsonMapper); } - private JsonFactory factory; + private JsonMapper jsonMapper; private final int maxSize; - public MaxSizeJsonFilter(int maxSize, JsonFactory jsonFactory) { + public MaxSizeJsonFilter(int maxSize, JsonMapper jsonMapper) { this.maxSize = maxSize; - this.factory = jsonFactory; + this.jsonMapper = jsonMapper; } public String transform(String body) throws IOException { StringBuilder output = new StringBuilder(maxSize + 128); try ( - final JsonParser parser = factory.createParser(body); + final JsonParser parser = jsonMapper.createParser(body); StringBuilderWriter writer = new StringBuilderWriter(output); - JsonGenerator generator = factory.createGenerator(writer); + JsonGenerator generator = jsonMapper.createGenerator(writer); ) { - process(parser, generator, () -> generator.getOutputBuffered() + output.length()); + process(parser, generator, () -> generator.streamWriteOutputBuffered() + output.length()); generator.close(); return writer.toString(); @@ -46,11 +50,11 @@ public String transform(String body) throws IOException { public String transform(byte[] body) throws IOException { StringBuilder output = new StringBuilder(maxSize + 128); try ( - final JsonParser parser = factory.createParser(body); + final JsonParser parser = jsonMapper.createParser(body); StringBuilderWriter writer = new StringBuilderWriter(output); - JsonGenerator generator = factory.createGenerator(writer); + JsonGenerator generator = jsonMapper.createGenerator(writer); ) { - process(parser, generator, () -> generator.getOutputBuffered() + output.length()); + process(parser, generator, () -> generator.streamWriteOutputBuffered() + output.length()); generator.close(); return writer.toString(); @@ -74,7 +78,7 @@ public void process(final JsonParser parser, JsonGenerator generator, LongSuppli if(nextToken == null) { break; } - if(nextToken == JsonToken.FIELD_NAME) { + if(nextToken == JsonToken.PROPERTY_NAME) { fieldName = parser.currentName(); continue; @@ -100,18 +104,18 @@ public void process(final JsonParser parser, JsonGenerator generator, LongSuppli if(outputSize + size >= maxSize) { // write notification - JsonStreamContext ctxt = generator.getOutputContext(); + TokenStreamContext ctxt = generator.streamWriteContext(); if (ctxt.inArray()) { generator.writeString("Logger: " + message); } else if (ctxt.inObject()) { - generator.writeStringField("Logger", message); + generator.writeStringProperty("Logger", message); } break; } if(fieldName != null) { - generator.writeFieldName(fieldName); + generator.writeName(fieldName); fieldName = null; } diff --git a/request-response/logbook-filter/src/test/java/no/entur/logging/cloud/logbook/util/MaxSizeJsonFilterTest.java b/request-response/logbook-filter/src/test/java/no/entur/logging/cloud/logbook/util/MaxSizeJsonFilterTest.java index 6aaa6c53..31141709 100644 --- a/request-response/logbook-filter/src/test/java/no/entur/logging/cloud/logbook/util/MaxSizeJsonFilterTest.java +++ b/request-response/logbook-filter/src/test/java/no/entur/logging/cloud/logbook/util/MaxSizeJsonFilterTest.java @@ -1,9 +1,11 @@ package no.entur.logging.cloud.logbook.util; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; import org.junit.jupiter.api.Assertions; +import tools.jackson.core.JsonGenerator; +import org.apache.commons.io.IOUtils; import org.junit.jupiter.api.Test; +import tools.jackson.core.json.JsonFactory; +import tools.jackson.databind.json.JsonMapper; import java.io.CharArrayWriter; import java.io.IOException; @@ -15,7 +17,7 @@ public class MaxSizeJsonFilterTest { private static final int MAX_BODY_SIZE = 14 * 1024; - private final MaxSizeJsonFilter filter = new MaxSizeJsonFilter(MAX_BODY_SIZE, new JsonFactory()); + private final MaxSizeJsonFilter filter = new MaxSizeJsonFilter(MAX_BODY_SIZE, JsonMapper.builder().build()); @Test public void testFilterTooBig() throws IOException { @@ -42,7 +44,7 @@ public void testFilterNotTooBig() throws IOException { @Test public void testFilterTooBigInvalidJson() throws IOException { - JsonValidator jsonValidator = new JsonValidator(new JsonFactory()); + JsonValidator jsonValidator = new JsonValidator(JsonMapper.builder().build()); String s = generateLongJson(2 * MAX_BODY_SIZE); @@ -68,11 +70,11 @@ private String generateLongJson(int size) throws IOException { JsonGenerator generator = factory.createGenerator(writer); generator.writeStartObject(); - generator.writeStringField("start", "here"); + generator.writeStringProperty("start", "here"); for(int i = 0; i < size; i += chunkSize) { - generator.writeStringField("longValue", generateLongString(chunkSize)); + generator.writeStringProperty("longValue", generateLongString(chunkSize)); } - generator.writeStringField("end", "here"); + generator.writeStringProperty("end", "here"); generator.writeEndObject(); generator.flush(); diff --git a/request-response/logbook-spring-boot-autoconfigure-test/src/main/java/no/entur/logging/cloud/spring/logbook/test/LogbookLoggingTestAutoConfiguration.java b/request-response/logbook-spring-boot-autoconfigure-test/src/main/java/no/entur/logging/cloud/spring/logbook/test/LogbookLoggingTestAutoConfiguration.java index ede22c88..05844513 100644 --- a/request-response/logbook-spring-boot-autoconfigure-test/src/main/java/no/entur/logging/cloud/spring/logbook/test/LogbookLoggingTestAutoConfiguration.java +++ b/request-response/logbook-spring-boot-autoconfigure-test/src/main/java/no/entur/logging/cloud/spring/logbook/test/LogbookLoggingTestAutoConfiguration.java @@ -1,7 +1,5 @@ package no.entur.logging.cloud.spring.logbook.test; -import org.entur.jackson.jsh.AnsiSyntaxHighlight; -import org.entur.jackson.jsh.DefaultSyntaxHighlighter; import no.entur.logging.cloud.logbook.RemoteHttpMessageContextSupplier; import no.entur.logging.cloud.logbook.ondemand.state.RequestHttpMessageStateSupplierSource; import no.entur.logging.cloud.logbook.ondemand.state.ResponseHttpMessageStateSupplierSource; @@ -11,6 +9,8 @@ import no.entur.logging.cloud.logbook.logbook.test.ondemand.PrettyPrintingOndemandLogLevelLogstashLogbackSink; import no.entur.logging.cloud.spring.logbook.AbstractLogbookLoggingAutoConfiguration; import no.entur.logging.cloud.spring.logbook.LogbookLoggingAutoConfiguration; +import org.entur.jackson.tools.jsh.AnsiSyntaxHighlight; +import org.entur.jackson.tools.jsh.DefaultSyntaxHighlighter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.event.Level; diff --git a/request-response/logbook-test/build.gradle b/request-response/logbook-test/build.gradle index 88a02d02..6d47aa19 100644 --- a/request-response/logbook-test/build.gradle +++ b/request-response/logbook-test/build.gradle @@ -6,11 +6,11 @@ dependencies { api("org.zalando:logbook-api:${logbookVersion}") - api ("org.entur.jackson:jackson-syntax-highlight:${jacksonSyntaxHighlightVersion}") + api ("org.entur.jackson:jackson-tools-syntax-highlight:${jacksonSyntaxHighlightVersion}") api ("org.entur.logback-logstash-syntax-highlighting-decorators:logback-logstash-syntax-highlighting-decorators:${logbackLogstashSyntaxHighlightingDecoratorsVersion}") api ("net.logstash.logback:logstash-logback-encoder:${logbackLogstashVersion}") - api ("com.fasterxml.jackson.core:jackson-core") + api ("tools.jackson.core:jackson-core") api("org.apache.commons:commons-text:${commonsTextVersion}") } diff --git a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingLogLevelLogstashLogbackSink.java b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingLogLevelLogstashLogbackSink.java index 4416a059..e933c924 100644 --- a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingLogLevelLogstashLogbackSink.java +++ b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingLogLevelLogstashLogbackSink.java @@ -1,6 +1,5 @@ package no.entur.logging.cloud.logbook.logbook.test; -import com.fasterxml.jackson.core.JsonFactory; import no.entur.logging.cloud.logbook.AbstractLogLevelLogstashLogbackSink; import no.entur.logging.cloud.logbook.AbstractSinkBuilder; import no.entur.logging.cloud.logbook.DefaultRemoteHttpMessageContextSupplier; @@ -9,6 +8,7 @@ import org.slf4j.Marker; import org.zalando.logbook.HttpRequest; import org.zalando.logbook.HttpResponse; +import tools.jackson.databind.json.JsonMapper; import java.time.Duration; import java.util.function.BiConsumer; @@ -41,22 +41,22 @@ public PrettyPrintingLogLevelLogstashLogbackSink build() { if (server == null) { throw new IllegalStateException("Expected server message composer"); } - if (jsonFactory == null) { - jsonFactory = new JsonFactory(); + if (jsonMapper == null) { + jsonMapper = JsonMapper.builder().build(); } if (remoteHttpMessageContextSupplier == null) { remoteHttpMessageContextSupplier = new DefaultRemoteHttpMessageContextSupplier(); } return new PrettyPrintingLogLevelLogstashLogbackSink(loggerToBiConsumer(), logEnabledToBooleanSupplier(), - jsonFactory, Math.min(maxBodySize, maxSize), remoteHttpMessageContextSupplier, server, client); + jsonMapper, Math.min(maxBodySize, maxSize), remoteHttpMessageContextSupplier, server, client); } } public PrettyPrintingLogLevelLogstashLogbackSink(BiConsumer logConsumer, - BooleanSupplier logLevelEnabled, JsonFactory jsonFactory, int maxSize, + BooleanSupplier logLevelEnabled, JsonMapper jsonMapper, int maxSize, RemoteHttpMessageContextSupplier remoteHttpMessageContextSupplier, MessageComposer server, MessageComposer client) { - super(logConsumer, logLevelEnabled, jsonFactory, maxSize, remoteHttpMessageContextSupplier, server, client); + super(logConsumer, logLevelEnabled, jsonMapper, maxSize, remoteHttpMessageContextSupplier, server, client); } @Override diff --git a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingRequestSingleFieldAppendingMarker.java b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingRequestSingleFieldAppendingMarker.java index 6856d286..bbcb8788 100644 --- a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingRequestSingleFieldAppendingMarker.java +++ b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingRequestSingleFieldAppendingMarker.java @@ -1,15 +1,11 @@ package no.entur.logging.cloud.logbook.logbook.test; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.PrettyPrinter; +import tools.jackson.core.JsonGenerator; import no.entur.logging.cloud.logbook.RequestSingleFieldAppendingMarker; import org.zalando.logbook.HttpRequest; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.function.BooleanSupplier; +import tools.jackson.core.JsonParser; +import tools.jackson.core.PrettyPrinter; +import tools.jackson.core.TokenStreamFactory; public class PrettyPrintingRequestSingleFieldAppendingMarker extends RequestSingleFieldAppendingMarker { @@ -18,13 +14,13 @@ public PrettyPrintingRequestSingleFieldAppendingMarker(HttpRequest request, Stri } @Override - protected void writeWellformedBody(JsonGenerator generator) throws IOException { + protected void writeWellformedBody(JsonGenerator generator) { final PrettyPrinter prettyPrinter = generator.getPrettyPrinter(); - generator.writeFieldName("body"); + generator.writeName("body"); if (prettyPrinter == null) { generator.writeRawValue(body); } else { - final JsonFactory factory = generator.getCodec().getFactory(); + final TokenStreamFactory factory = generator.objectWriteContext().tokenStreamFactory(); // append to existing tree event by event try (final JsonParser parser = factory.createParser(body)) { diff --git a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingResponseSingleFieldAppendingMarker.java b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingResponseSingleFieldAppendingMarker.java index f5b961c6..a7e13f24 100644 --- a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingResponseSingleFieldAppendingMarker.java +++ b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingResponseSingleFieldAppendingMarker.java @@ -1,11 +1,12 @@ package no.entur.logging.cloud.logbook.logbook.test; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.PrettyPrinter; +import tools.jackson.core.JsonGenerator; import no.entur.logging.cloud.logbook.ResponseSingleFieldAppendingMarker; import org.zalando.logbook.HttpResponse; +import tools.jackson.core.JsonParser; +import tools.jackson.core.PrettyPrinter; +import tools.jackson.core.TokenStreamFactory; +import tools.jackson.core.json.JsonFactory; import java.io.IOException; import java.time.Duration; @@ -18,13 +19,13 @@ public PrettyPrintingResponseSingleFieldAppendingMarker(HttpResponse response, D } @Override - protected void writeWellformedBody(JsonGenerator generator) throws IOException { + protected void writeWellformedBody(JsonGenerator generator) { final PrettyPrinter prettyPrinter = generator.getPrettyPrinter(); - generator.writeFieldName("body"); + generator.writeName("body"); if (prettyPrinter == null) { generator.writeRawValue(body); } else { - final JsonFactory factory = generator.getCodec().getFactory(); + final TokenStreamFactory factory = generator.objectWriteContext().tokenStreamFactory(); // append to existing tree event by event try (final JsonParser parser = factory.createParser(body)) { diff --git a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingSink.java b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingSink.java index 34fea8c3..033fce02 100644 --- a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingSink.java +++ b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/PrettyPrintingSink.java @@ -1,12 +1,10 @@ package no.entur.logging.cloud.logbook.logbook.test; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import no.entur.logging.cloud.logbook.AbstractLogLevelLogstashLogbackSink; -import org.entur.jackson.jsh.AnsiSyntaxHighlight; -import org.entur.jackson.jsh.SyntaxHighlighter; -import org.entur.jackson.jsh.SyntaxHighlightingJsonGenerator; +import org.entur.jackson.tools.jsh.AnsiSyntaxHighlight; +import org.entur.jackson.tools.jsh.SyntaxHighlighter; +import org.entur.jackson.tools.jsh.SyntaxHighlightingJsonGenerator; +import org.entur.jackson.tools.jsh.SyntaxHighlightingPrettyPrinter; +import tools.jackson.core.JsonGenerator; import no.entur.logging.cloud.logbook.AbstractLogLevelSink; import no.entur.logging.cloud.logbook.AbstractSinkBuilder; import no.entur.logging.cloud.logbook.MessageComposer; @@ -16,6 +14,9 @@ import org.zalando.logbook.Correlation; import org.zalando.logbook.HttpRequest; import org.zalando.logbook.HttpResponse; +import tools.jackson.core.JsonParser; +import tools.jackson.databind.SerializationFeature; +import tools.jackson.databind.json.JsonMapper; import java.io.IOException; import java.io.StringWriter; @@ -47,8 +48,11 @@ public PrettyPrintingSink build() { if (syntaxHighlighter == null) { throw new IllegalStateException("Expected Json syntax highlighter level"); } - if (jsonFactory == null) { - jsonFactory = new JsonFactory(); + if (jsonMapper == null) { + jsonMapper = JsonMapper.builder() + .defaultPrettyPrinter(new SyntaxHighlightingPrettyPrinter(syntaxHighlighter)) + .configure(SerializationFeature.INDENT_OUTPUT, true) + .build(); } if (client == null) { throw new IllegalStateException("Expected client message composer"); @@ -61,21 +65,21 @@ public PrettyPrintingSink build() { // backend, but getting the same during testing as in production makes most // sense - return new PrettyPrintingSink(logEnabledToBooleanSupplier(), loggerToBiConsumer(), jsonFactory, + return new PrettyPrintingSink(logEnabledToBooleanSupplier(), loggerToBiConsumer(), jsonMapper, syntaxHighlighter, server, client); } } - protected final JsonFactory jsonFactory; + protected final JsonMapper jsonMapper; protected final SyntaxHighlighter syntaxHighlighter; public PrettyPrintingSink(BooleanSupplier logLevelEnabled, BiConsumer logConsumer, - JsonFactory jsonFactory, SyntaxHighlighter syntaxHighlighter, MessageComposer server, + JsonMapper jsonMapper, SyntaxHighlighter syntaxHighlighter, MessageComposer server, MessageComposer client) { super(logLevelEnabled, logConsumer, server, client); - this.jsonFactory = jsonFactory; + this.jsonMapper = jsonMapper; this.syntaxHighlighter = syntaxHighlighter; } @@ -160,16 +164,19 @@ public String prettyPrint(String body) { if (body != null && body.length() > 0) { try ( - JsonParser parser = jsonFactory.createParser(body); + JsonParser parser = jsonMapper.createParser(body); StringWriter writer = new StringWriter(body.length() * 2); - JsonGenerator generator = jsonFactory.createGenerator(writer);) { - JsonGenerator jsonGenerator = new SyntaxHighlightingJsonGenerator(generator, syntaxHighlighter, true); + JsonGenerator generator = jsonMapper.createGenerator(writer);) { + + SyntaxHighlightingPrettyPrinter prettyPrinter = (SyntaxHighlightingPrettyPrinter)generator.getPrettyPrinter(); + + JsonGenerator jsonGenerator = new SyntaxHighlightingJsonGenerator(generator, prettyPrinter, prettyPrinter.getObjectIndenter(), prettyPrinter.getArrayIndenter(), prettyPrinter.getSyntaxHighlighter()); while (parser.nextToken() != null) { jsonGenerator.copyCurrentEvent(parser); } jsonGenerator.flush(); return writer.toString(); - } catch (IOException e) { + } catch (Exception e) { // ignore, keep payload as-is } } diff --git a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingLocalHttpMessageBodyWriter.java b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingLocalHttpMessageBodyWriter.java index 0d3b3b9c..2fa231d9 100644 --- a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingLocalHttpMessageBodyWriter.java +++ b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingLocalHttpMessageBodyWriter.java @@ -1,10 +1,11 @@ package no.entur.logging.cloud.logbook.logbook.test.ondemand; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.PrettyPrinter; import no.entur.logging.cloud.logbook.ondemand.HttpMessageBodyWriter; +import tools.jackson.core.JsonGenerator; +import tools.jackson.core.JsonParser; +import tools.jackson.core.PrettyPrinter; +import tools.jackson.core.TokenStreamFactory; +import tools.jackson.core.json.JsonFactory; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -24,13 +25,13 @@ public void prepareResult() { @Override public void writeBody(JsonGenerator generator) throws IOException { - generator.writeFieldName("body"); + generator.writeName("body"); PrettyPrinter prettyPrinter = generator.getPrettyPrinter(); if (prettyPrinter == null) { generator.writeRawValue(new String(input, StandardCharsets.UTF_8)); } else { - final JsonFactory factory = generator.getCodec().getFactory(); + final TokenStreamFactory factory = generator.objectWriteContext().tokenStreamFactory(); // append to existing tree event by event try (final JsonParser parser = factory.createParser(input)) { diff --git a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingLocalMaxSizeHttpMessageBodyWriter.java b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingLocalMaxSizeHttpMessageBodyWriter.java index 66cd4c5d..2a887761 100644 --- a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingLocalMaxSizeHttpMessageBodyWriter.java +++ b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingLocalMaxSizeHttpMessageBodyWriter.java @@ -1,9 +1,13 @@ package no.entur.logging.cloud.logbook.logbook.test.ondemand; -import com.fasterxml.jackson.core.*; import no.entur.logging.cloud.logbook.ondemand.HttpMessageBodyWriter; import no.entur.logging.cloud.logbook.ondemand.state.HttpMessageStateResult; import no.entur.logging.cloud.logbook.util.MaxSizeJsonFilter; +import tools.jackson.core.JsonGenerator; +import tools.jackson.core.JsonParser; +import tools.jackson.core.PrettyPrinter; +import tools.jackson.core.json.JsonFactory; +import tools.jackson.databind.json.JsonMapper; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -12,12 +16,12 @@ public class PrettyPrintingLocalMaxSizeHttpMessageBodyWriter implements HttpMess protected final byte[] input; protected final int maxSize; - protected final JsonFactory jsonFactory; + protected final JsonMapper jsonMapper; protected HttpMessageStateResult output; - public PrettyPrintingLocalMaxSizeHttpMessageBodyWriter(JsonFactory jsonFactory, byte[] input, int maxSize) { - this.jsonFactory = jsonFactory; + public PrettyPrintingLocalMaxSizeHttpMessageBodyWriter(JsonMapper jsonMapper, byte[] input, int maxSize) { + this.jsonMapper = jsonMapper; this.input = input; this.maxSize = maxSize; } @@ -47,13 +51,13 @@ public void writeBody(JsonGenerator generator) throws IOException { HttpMessageStateResult output = this.output; if(output.isWellformed()) { - generator.writeFieldName("body"); + generator.writeName("body"); PrettyPrinter prettyPrinter = generator.getPrettyPrinter(); if (prettyPrinter == null) { generator.writeRawValue(new String(input, StandardCharsets.UTF_8)); } else { - final JsonFactory factory = generator.getCodec().getFactory(); + JsonFactory factory = jsonMapper.tokenStreamFactory(); // append to existing tree event by event try (final JsonParser parser = factory.createParser(input)) { @@ -63,12 +67,12 @@ public void writeBody(JsonGenerator generator) throws IOException { } } } else { - generator.writeStringField("body", output.getBody()); + generator.writeStringProperty("body", output.getBody()); } } protected String filterMaxSize(byte[] body) { - MaxSizeJsonFilter filter = new MaxSizeJsonFilter(maxSize, jsonFactory); + MaxSizeJsonFilter filter = new MaxSizeJsonFilter(maxSize, jsonMapper); try { return filter.transform(body); diff --git a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingOndemandLogLevelLogstashLogbackSink.java b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingOndemandLogLevelLogstashLogbackSink.java index cdce4af3..8c5057b2 100644 --- a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingOndemandLogLevelLogstashLogbackSink.java +++ b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingOndemandLogLevelLogstashLogbackSink.java @@ -1,6 +1,5 @@ package no.entur.logging.cloud.logbook.logbook.test.ondemand; -import com.fasterxml.jackson.core.JsonFactory; import no.entur.logging.cloud.logbook.AbstractLogLevelLogstashLogbackSink; import no.entur.logging.cloud.logbook.DefaultRemoteHttpMessageContextSupplier; import no.entur.logging.cloud.logbook.MessageComposer; @@ -15,9 +14,8 @@ import org.zalando.logbook.HttpRequest; import org.zalando.logbook.HttpResponse; import org.zalando.logbook.Origin; +import tools.jackson.databind.json.JsonMapper; -import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.util.function.BiConsumer; import java.util.function.BooleanSupplier; @@ -55,26 +53,26 @@ public PrettyPrintingOndemandLogLevelLogstashLogbackSink build() { if (server == null) { throw new IllegalStateException("Expected server message composer"); } - if (jsonFactory == null) { - jsonFactory = new JsonFactory(); + if (jsonMapper == null) { + jsonMapper = JsonMapper.builder().build(); } if (remoteHttpMessageContextSupplier == null) { remoteHttpMessageContextSupplier = new DefaultRemoteHttpMessageContextSupplier(); } return new PrettyPrintingOndemandLogLevelLogstashLogbackSink(loggerToBiConsumer(), - logEnabledToBooleanSupplier(), jsonFactory, requestBodyWellformedDecisionSupplier, + logEnabledToBooleanSupplier(), jsonMapper, requestBodyWellformedDecisionSupplier, responseBodyWellformedDecisionSupplier, maxBodySize, maxSize, remoteHttpMessageContextSupplier, server, client); } } public PrettyPrintingOndemandLogLevelLogstashLogbackSink(BiConsumer logConsumer, - BooleanSupplier logLevelEnabled, JsonFactory jsonFactory, + BooleanSupplier logLevelEnabled, JsonMapper jsonMapper, RequestHttpMessageStateSupplierSource requestHttpMessageStateSupplierSource, ResponseHttpMessageStateSupplierSource responseHttpMessageStateSupplierSource, int maxBodySize, int maxSize, RemoteHttpMessageContextSupplier remoteHttpMessageContextSupplier, MessageComposer server, MessageComposer client) { - super(logConsumer, logLevelEnabled, jsonFactory, requestHttpMessageStateSupplierSource, + super(logConsumer, logLevelEnabled, jsonMapper, requestHttpMessageStateSupplierSource, responseHttpMessageStateSupplierSource, maxBodySize, maxSize, remoteHttpMessageContextSupplier, server, client); } @@ -91,21 +89,21 @@ public Marker createRequestMarker(HttpRequest request) { if (body.length > maxBodySize) { writer = new PrettyPrintingLocalHttpMessageBodyWriter(body); } else { - writer = new PrettyPrintingLocalMaxSizeHttpMessageBodyWriter(jsonFactory, body, + writer = new PrettyPrintingLocalMaxSizeHttpMessageBodyWriter(jsonMapper, body, maxBodySize); } } else { HttpMessageStateSupplier httpMessageStateSupplier = requestHttpMessageStateSupplierSource.get(); if (body.length > maxBodySize) { - writer = new PrettyPrintingRemoteHttpMessageBodyWriter(jsonFactory, body, + writer = new PrettyPrintingRemoteHttpMessageBodyWriter(jsonMapper, body, httpMessageStateSupplier); } else { - writer = new PrettyPrintingRemoteMaxSizeHttpMessageBodyWriter(jsonFactory, body, maxSize, + writer = new PrettyPrintingRemoteMaxSizeHttpMessageBodyWriter(jsonMapper, body, maxSize, httpMessageStateSupplier); } } } - } catch (IOException e) { + } catch (Exception e) { // ignore } } else if (AbstractLogLevelLogstashLogbackSink.isXmlMediaType(request.getContentType())) { @@ -120,7 +118,7 @@ public Marker createRequestMarker(HttpRequest request) { writer = new StringHttpMessageBodyWriter(bodyAsString); } } - } catch (IOException e) { + } catch (Exception e) { // ignore } } @@ -141,22 +139,22 @@ public Marker createResponseMarker(Correlation correlation, HttpResponse respons if (body.length > maxBodySize) { writer = new PrettyPrintingLocalHttpMessageBodyWriter(body); } else { - writer = new PrettyPrintingLocalMaxSizeHttpMessageBodyWriter(jsonFactory, body, + writer = new PrettyPrintingLocalMaxSizeHttpMessageBodyWriter(jsonMapper, body, maxBodySize); } } else { HttpMessageStateSupplier httpMessageStateSupplier = responseHttpMessageStateSupplierSource .get(); if (body.length > maxBodySize) { - writer = new PrettyPrintingRemoteHttpMessageBodyWriter(jsonFactory, body, + writer = new PrettyPrintingRemoteHttpMessageBodyWriter(jsonMapper, body, httpMessageStateSupplier); } else { - writer = new PrettyPrintingRemoteMaxSizeHttpMessageBodyWriter(jsonFactory, body, maxSize, + writer = new PrettyPrintingRemoteMaxSizeHttpMessageBodyWriter(jsonMapper, body, maxSize, httpMessageStateSupplier); } } } - } catch (IOException e) { + } catch (Exception e) { // ignore } } else if (AbstractLogLevelLogstashLogbackSink.isXmlMediaType(response.getContentType())) { @@ -171,7 +169,7 @@ public Marker createResponseMarker(Correlation correlation, HttpResponse respons writer = new StringHttpMessageBodyWriter(bodyAsString); } } - } catch (IOException e) { + } catch (Exception e) { // ignore } } diff --git a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingRemoteHttpMessageBodyWriter.java b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingRemoteHttpMessageBodyWriter.java index 31e14995..674fa91c 100644 --- a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingRemoteHttpMessageBodyWriter.java +++ b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingRemoteHttpMessageBodyWriter.java @@ -1,12 +1,13 @@ package no.entur.logging.cloud.logbook.logbook.test.ondemand; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.PrettyPrinter; import no.entur.logging.cloud.logbook.ondemand.state.HttpMessageState; import no.entur.logging.cloud.logbook.ondemand.state.HttpMessageStateResult; import no.entur.logging.cloud.logbook.ondemand.state.HttpMessageStateSupplier; +import tools.jackson.core.JsonGenerator; +import tools.jackson.core.JsonParser; +import tools.jackson.core.PrettyPrinter; +import tools.jackson.core.TokenStreamFactory; +import tools.jackson.databind.json.JsonMapper; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -17,12 +18,12 @@ public class PrettyPrintingRemoteHttpMessageBodyWriter extends PrettyPrintingLoc protected final HttpMessageStateSupplier httpMessageStateSupplier; protected volatile HttpMessageStateResult output; - protected final JsonFactory jsonFactory; + protected final JsonMapper jsonMapper; - public PrettyPrintingRemoteHttpMessageBodyWriter(JsonFactory jsonFactory, byte[] input, HttpMessageStateSupplier httpMessageStateSupplier) { + public PrettyPrintingRemoteHttpMessageBodyWriter(JsonMapper jsonMapper, byte[] input, HttpMessageStateSupplier httpMessageStateSupplier) { super(input); - this.jsonFactory = jsonFactory; + this.jsonMapper = jsonMapper; this.httpMessageStateSupplier = httpMessageStateSupplier; } @@ -50,28 +51,28 @@ public void writeBody(JsonGenerator generator) throws IOException { this.output = output = createResult(); } if(output.isWellformed()) { - generator.writeFieldName("body"); + generator.writeName("body"); PrettyPrinter prettyPrinter = generator.getPrettyPrinter(); if (prettyPrinter == null) { generator.writeRawValue(output.getBody()); } else { - final JsonFactory factory = generator.getCodec().getFactory(); + final TokenStreamFactory factory = generator.objectWriteContext().tokenStreamFactory(); // append to existing tree event by event - try (final JsonParser parser = factory.createParser(output.getBody())) { + try (final JsonParser parser = jsonMapper.createParser(output.getBody())) { while (parser.nextToken() != null) { generator.copyCurrentEvent(parser); } } } } else { - generator.writeStringField("body", output.getBody()); + generator.writeStringProperty("body", output.getBody()); } } protected boolean isWellformedJson() { - try (JsonParser parser = jsonFactory.createParser(new ByteArrayInputStream(input))) { + try (JsonParser parser = jsonMapper.createParser(new ByteArrayInputStream(input))) { while(parser.nextToken() != null); } catch(Exception e) { return false; diff --git a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingRemoteMaxSizeHttpMessageBodyWriter.java b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingRemoteMaxSizeHttpMessageBodyWriter.java index 61bfd340..51ba7765 100644 --- a/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingRemoteMaxSizeHttpMessageBodyWriter.java +++ b/request-response/logbook-test/src/main/java/no/entur/logging/cloud/logbook/logbook/test/ondemand/PrettyPrintingRemoteMaxSizeHttpMessageBodyWriter.java @@ -1,9 +1,9 @@ package no.entur.logging.cloud.logbook.logbook.test.ondemand; -import com.fasterxml.jackson.core.JsonFactory; import no.entur.logging.cloud.logbook.ondemand.state.HttpMessageState; import no.entur.logging.cloud.logbook.ondemand.state.HttpMessageStateResult; import no.entur.logging.cloud.logbook.ondemand.state.HttpMessageStateSupplier; +import tools.jackson.databind.json.JsonMapper; import java.nio.charset.StandardCharsets; @@ -11,8 +11,8 @@ public class PrettyPrintingRemoteMaxSizeHttpMessageBodyWriter extends PrettyPrin protected final HttpMessageStateSupplier httpMessageStateSupplier; - public PrettyPrintingRemoteMaxSizeHttpMessageBodyWriter(JsonFactory jsonFactory, byte[] input, int maxSize, HttpMessageStateSupplier httpMessageStateSupplier) { - super(jsonFactory, input, maxSize); + public PrettyPrintingRemoteMaxSizeHttpMessageBodyWriter(JsonMapper mapper, byte[] input, int maxSize, HttpMessageStateSupplier httpMessageStateSupplier) { + super(mapper, input, maxSize); this.httpMessageStateSupplier = httpMessageStateSupplier; } diff --git a/request-response/logbook/build.gradle b/request-response/logbook/build.gradle index 5faac32c..18482d09 100644 --- a/request-response/logbook/build.gradle +++ b/request-response/logbook/build.gradle @@ -9,7 +9,7 @@ dependencies { api "commons-io:commons-io:${commonsIoVersion}" api ("net.logstash.logback:logstash-logback-encoder:${logbackLogstashVersion}") - api("com.fasterxml.jackson.core:jackson-core") + api("tools.jackson.core:jackson-core") api("org.apache.commons:commons-text:${commonsTextVersion}") diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/AbstractLogLevelLogstashLogbackSink.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/AbstractLogLevelLogstashLogbackSink.java index 5ec308b5..17db022a 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/AbstractLogLevelLogstashLogbackSink.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/AbstractLogLevelLogstashLogbackSink.java @@ -1,6 +1,5 @@ package no.entur.logging.cloud.logbook; -import com.fasterxml.jackson.core.JsonFactory; import no.entur.logging.cloud.logbook.util.JsonValidator; import no.entur.logging.cloud.logbook.util.MaxSizeJsonFilter; import org.slf4j.Marker; @@ -9,6 +8,7 @@ import org.zalando.logbook.HttpRequest; import org.zalando.logbook.HttpResponse; import org.zalando.logbook.Origin; +import tools.jackson.databind.json.JsonMapper; import javax.annotation.Nullable; @@ -26,13 +26,13 @@ public abstract class AbstractLogLevelLogstashLogbackSink extends AbstractLogLev protected final RemoteHttpMessageContextSupplier remoteHttpMessageContextSupplier; public AbstractLogLevelLogstashLogbackSink(BiConsumer logConsumer, BooleanSupplier logLevelEnabled, - JsonFactory jsonFactory, int maxSize, RemoteHttpMessageContextSupplier remoteHttpMessageContextSupplier, - MessageComposer server, MessageComposer client) { + JsonMapper jsonMapper, int maxSize, RemoteHttpMessageContextSupplier remoteHttpMessageContextSupplier, + MessageComposer server, MessageComposer client) { super(logLevelEnabled, logConsumer, server, client); this.maxSize = maxSize; - this.maxSizeJsonFilter = new MaxSizeJsonFilter(maxSize, jsonFactory); - this.jsonValidator = new JsonValidator(jsonFactory); + this.maxSizeJsonFilter = new MaxSizeJsonFilter(maxSize, jsonMapper); + this.jsonValidator = new JsonValidator(jsonMapper); this.remoteHttpMessageContextSupplier = remoteHttpMessageContextSupplier; } diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/AbstractSingleFieldAppendingMarker.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/AbstractSingleFieldAppendingMarker.java index c0e5b0cb..9e3a1338 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/AbstractSingleFieldAppendingMarker.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/AbstractSingleFieldAppendingMarker.java @@ -1,6 +1,6 @@ package no.entur.logging.cloud.logbook; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import net.logstash.logback.marker.SingleFieldAppendingMarker; import org.zalando.logbook.ContentType; import org.zalando.logbook.HttpMessage; @@ -40,14 +40,14 @@ protected void writeBody(JsonGenerator generator) { if (wellformed) { writeWellformedBody(generator); } else { - generator.writeStringField("body", body); + generator.writeStringProperty("body", body); } } catch (Exception e) { // should never happen, this is probably going to blow up somewhere else } } else { try { - generator.writeStringField("body", body); + generator.writeStringProperty("body", body); } catch (Exception e) { // should never happen, this is probably going to blow up somewhere else } @@ -55,20 +55,20 @@ protected void writeBody(JsonGenerator generator) { } } - protected void writeWellformedBody(JsonGenerator generator) throws IOException { - generator.writeFieldName("body"); + protected void writeWellformedBody(JsonGenerator generator) { + generator.writeName("body"); generator.writeRawValue(body); } - protected void writeHeaders(JsonGenerator generator) throws IOException { - generator.writeFieldName("headers"); + protected void writeHeaders(JsonGenerator generator) { + generator.writeName("headers"); generator.writeStartObject(); if(headers != null) { for (Map.Entry> stringListEntry : headers.entrySet()) { String key = stringListEntry.getKey(); if(key != null && !key.isEmpty()) { - generator.writeFieldName(key.toLowerCase()); + generator.writeName(key.toLowerCase()); generator.writeStartArray(); List values = stringListEntry.getValue(); diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/AbstractSinkBuilder.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/AbstractSinkBuilder.java index 1812b37c..2f2f3c9b 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/AbstractSinkBuilder.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/AbstractSinkBuilder.java @@ -1,10 +1,9 @@ package no.entur.logging.cloud.logbook; -import com.fasterxml.jackson.core.JsonFactory; - import org.slf4j.Logger; import org.slf4j.Marker; import org.slf4j.event.Level; +import tools.jackson.databind.json.JsonMapper; import java.util.function.BiConsumer; import java.util.function.BooleanSupplier; @@ -17,7 +16,7 @@ public abstract class AbstractSinkBuilder protected Level level; - protected JsonFactory jsonFactory; + protected JsonMapper jsonMapper; protected int maxSize = -1; protected int maxBodySize = -1; @@ -32,8 +31,8 @@ public B withLogger(Logger logger) { return (B) this; } - public B withJsonFactory(JsonFactory jsonFactory) { - this.jsonFactory = jsonFactory; + public B withJsonFactory(JsonMapper jsonMapper) { + this.jsonMapper = jsonMapper; return (B) this; } diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/LogLevelLogstashLogbackSink.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/LogLevelLogstashLogbackSink.java index fbf864a9..aa351806 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/LogLevelLogstashLogbackSink.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/LogLevelLogstashLogbackSink.java @@ -1,9 +1,9 @@ package no.entur.logging.cloud.logbook; -import com.fasterxml.jackson.core.JsonFactory; import org.slf4j.Marker; import org.zalando.logbook.HttpRequest; import org.zalando.logbook.HttpResponse; +import tools.jackson.databind.json.JsonMapper; import java.time.Duration; import java.util.function.BiConsumer; @@ -19,9 +19,9 @@ public class LogLevelLogstashLogbackSink extends AbstractLogLevelLogstashLogbackSink { public LogLevelLogstashLogbackSink(BiConsumer logConsumer, BooleanSupplier logLevelEnabled, - JsonFactory jsonFactory, int maxSize, RemoteHttpMessageContextSupplier remoteHttpMessageContextSupplier, - MessageComposer server, MessageComposer client) { - super(logConsumer, logLevelEnabled, jsonFactory, maxSize, remoteHttpMessageContextSupplier, server, client); + JsonMapper jsonMapper, int maxSize, RemoteHttpMessageContextSupplier remoteHttpMessageContextSupplier, + MessageComposer server, MessageComposer client) { + super(logConsumer, logLevelEnabled, jsonMapper, maxSize, remoteHttpMessageContextSupplier, server, client); } public static Builder newBuilder() { @@ -49,13 +49,13 @@ public LogLevelLogstashLogbackSink build() { if (server == null) { throw new IllegalStateException("Expected server message composer"); } - if (jsonFactory == null) { - jsonFactory = new JsonFactory(); + if (jsonMapper == null) { + jsonMapper = JsonMapper.builder().build(); } if (remoteHttpMessageContextSupplier == null) { remoteHttpMessageContextSupplier = new DefaultRemoteHttpMessageContextSupplier(); } - return new LogLevelLogstashLogbackSink(loggerToBiConsumer(), logEnabledToBooleanSupplier(), jsonFactory, + return new LogLevelLogstashLogbackSink(loggerToBiConsumer(), logEnabledToBooleanSupplier(), jsonMapper, Math.min(maxBodySize, maxSize), remoteHttpMessageContextSupplier, server, client); } } diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/RequestSingleFieldAppendingMarker.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/RequestSingleFieldAppendingMarker.java index 23100dd6..5b3c5548 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/RequestSingleFieldAppendingMarker.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/RequestSingleFieldAppendingMarker.java @@ -1,6 +1,6 @@ package no.entur.logging.cloud.logbook; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import org.zalando.logbook.HttpRequest; import org.zalando.logbook.Origin; @@ -45,38 +45,38 @@ protected void prepareForDeferredProcessing(HttpRequest message) { } @Override - protected void writeFieldValue(JsonGenerator generator) throws IOException { + protected void writeFieldValue(JsonGenerator generator) { generator.writeStartObject(); if(origin != null) { - generator.writeStringField("origin", origin); + generator.writeStringProperty("origin", origin); } - generator.writeStringField("type", "request"); + generator.writeStringProperty("type", "request"); if(protocol != null) { - generator.writeStringField("protocol", protocol); + generator.writeStringProperty("protocol", protocol); } if(remote != null) { - generator.writeStringField("remote", remote); + generator.writeStringProperty("remote", remote); } if(method != null) { - generator.writeStringField("method", method); + generator.writeStringProperty("method", method); } if(uri != null) { - generator.writeStringField("uri", uri); + generator.writeStringProperty("uri", uri); } if(host != null) { - generator.writeStringField("host", host); + generator.writeStringProperty("host", host); } if(path != null) { - generator.writeStringField("path", path); + generator.writeStringProperty("path", path); } if(scheme != null) { - generator.writeStringField("scheme", scheme); + generator.writeStringProperty("scheme", scheme); } if(port.isEmpty()) { - generator.writeNumberField("port", 80); + generator.writeNumberProperty("port", 80); } else { - generator.writeNumberField("port", port.get()); + generator.writeNumberProperty("port", port.get()); } writeHeaders(generator); diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ResponseSingleFieldAppendingMarker.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ResponseSingleFieldAppendingMarker.java index 0555b6f8..4f9ff5b6 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ResponseSingleFieldAppendingMarker.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ResponseSingleFieldAppendingMarker.java @@ -1,6 +1,6 @@ package no.entur.logging.cloud.logbook; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import org.zalando.logbook.HttpResponse; import org.zalando.logbook.Origin; @@ -36,20 +36,20 @@ protected void prepareForDeferredProcessing(HttpResponse message) { } @Override - protected void writeFieldValue(JsonGenerator generator) throws IOException { + protected void writeFieldValue(JsonGenerator generator) { generator.writeStartObject(); if(origin != null) { - generator.writeStringField("origin", origin); + generator.writeStringProperty("origin", origin); } - generator.writeStringField("type", "response"); + generator.writeStringProperty("type", "response"); if(duration != null) { - generator.writeNumberField("duration", duration.toMillis()); + generator.writeNumberProperty("duration", duration.toMillis()); } if(protocol != null) { - generator.writeStringField("protocol", protocol); + generator.writeStringProperty("protocol", protocol); } - generator.writeNumberField("status", status); + generator.writeNumberProperty("status", status); writeHeaders(generator); writeBody(generator); diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/AbstractOndemandLogLevelLogstashLogbackSink.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/AbstractOndemandLogLevelLogstashLogbackSink.java index 02def91f..cfef2b88 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/AbstractOndemandLogLevelLogstashLogbackSink.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/AbstractOndemandLogLevelLogstashLogbackSink.java @@ -1,12 +1,12 @@ package no.entur.logging.cloud.logbook.ondemand; -import com.fasterxml.jackson.core.JsonFactory; import no.entur.logging.cloud.logbook.AbstractLogLevelSink; import no.entur.logging.cloud.logbook.MessageComposer; import no.entur.logging.cloud.logbook.RemoteHttpMessageContextSupplier; import no.entur.logging.cloud.logbook.ondemand.state.RequestHttpMessageStateSupplierSource; import no.entur.logging.cloud.logbook.ondemand.state.ResponseHttpMessageStateSupplierSource; import org.slf4j.Marker; +import tools.jackson.databind.json.JsonMapper; import java.util.function.BiConsumer; import java.util.function.BooleanSupplier; @@ -18,18 +18,18 @@ public abstract class AbstractOndemandLogLevelLogstashLogbackSink extends Abstra protected final RemoteHttpMessageContextSupplier remoteHttpMessageContextSupplier; - protected JsonFactory jsonFactory; + protected JsonMapper jsonMapper; protected final int maxBodySize; protected final int maxSize; public AbstractOndemandLogLevelLogstashLogbackSink(BiConsumer logConsumer, - BooleanSupplier logLevelEnabled, JsonFactory jsonFactory, + BooleanSupplier logLevelEnabled, JsonMapper jsonMapper, RequestHttpMessageStateSupplierSource requestHttpMessageStateSupplierSource, ResponseHttpMessageStateSupplierSource responseHttpMessageStateSupplierSource, int maxBodySize, int maxSize, RemoteHttpMessageContextSupplier remoteHttpMessageContextSupplier, MessageComposer server, MessageComposer client) { super(logLevelEnabled, logConsumer, server, client); - this.jsonFactory = jsonFactory; + this.jsonMapper = jsonMapper; this.requestHttpMessageStateSupplierSource = requestHttpMessageStateSupplierSource; this.responseHttpMessageStateSupplierSource = responseHttpMessageStateSupplierSource; this.maxBodySize = maxBodySize; diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/AbstractOndemandSingleFieldAppendingMarker.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/AbstractOndemandSingleFieldAppendingMarker.java index 99206a4b..9fc77373 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/AbstractOndemandSingleFieldAppendingMarker.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/AbstractOndemandSingleFieldAppendingMarker.java @@ -1,6 +1,6 @@ package no.entur.logging.cloud.logbook.ondemand; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import net.logstash.logback.marker.SingleFieldAppendingMarker; import no.entur.logging.cloud.appender.scope.LoggingScopePostProcessing; import org.zalando.logbook.ContentType; @@ -60,15 +60,15 @@ protected void writeBody(JsonGenerator generator) { } - protected void writeHeaders(JsonGenerator generator) throws IOException { - generator.writeFieldName("headers"); + protected void writeHeaders(JsonGenerator generator) { + generator.writeName("headers"); generator.writeStartObject(); if(headers != null) { for (Map.Entry> stringListEntry : headers.entrySet()) { String key = stringListEntry.getKey(); if(key != null && !key.isEmpty()) { - generator.writeFieldName(key.toLowerCase()); + generator.writeName(key.toLowerCase()); generator.writeStartArray(); List values = stringListEntry.getValue(); diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/EmptyHttpMessageBodyWriter.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/EmptyHttpMessageBodyWriter.java index 9f48d6f7..821b6384 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/EmptyHttpMessageBodyWriter.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/EmptyHttpMessageBodyWriter.java @@ -1,6 +1,6 @@ package no.entur.logging.cloud.logbook.ondemand; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import java.io.IOException; diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/HttpMessageBodyWriter.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/HttpMessageBodyWriter.java index 3effb7d0..d368c295 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/HttpMessageBodyWriter.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/HttpMessageBodyWriter.java @@ -1,6 +1,6 @@ package no.entur.logging.cloud.logbook.ondemand; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import java.io.IOException; diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/LocalHttpMessageBodyWriter.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/LocalHttpMessageBodyWriter.java index 03f1b0ae..8da81c94 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/LocalHttpMessageBodyWriter.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/LocalHttpMessageBodyWriter.java @@ -1,6 +1,6 @@ package no.entur.logging.cloud.logbook.ondemand; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -20,7 +20,7 @@ public void prepareResult() { @Override public void writeBody(JsonGenerator generator) throws IOException { - generator.writeFieldName("body"); + generator.writeName("body"); generator.writeRawValue(new String(input, StandardCharsets.UTF_8)); } diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/MaxSizeLocalHttpMessageBodyWriter.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/MaxSizeLocalHttpMessageBodyWriter.java index de088b1f..61058836 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/MaxSizeLocalHttpMessageBodyWriter.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/MaxSizeLocalHttpMessageBodyWriter.java @@ -1,8 +1,12 @@ package no.entur.logging.cloud.logbook.ondemand; -import com.fasterxml.jackson.core.*; import no.entur.logging.cloud.logbook.ondemand.state.HttpMessageStateResult; import no.entur.logging.cloud.logbook.util.MaxSizeJsonFilter; +import tools.jackson.core.JsonGenerator; +import tools.jackson.core.JsonParser; +import tools.jackson.core.JsonToken; +import tools.jackson.core.TokenStreamContext; +import tools.jackson.databind.json.JsonMapper; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -11,17 +15,17 @@ public class MaxSizeLocalHttpMessageBodyWriter implements HttpMessageBodyWriter protected final byte[] input; protected final int maxSize; - protected final JsonFactory jsonFactory; + protected final JsonMapper jsonMapper; protected final MaxSizeJsonFilter maxSizeFilter; protected HttpMessageStateResult output; - public MaxSizeLocalHttpMessageBodyWriter(JsonFactory jsonFactory, byte[] input, int maxSize) { - this.jsonFactory = jsonFactory; + public MaxSizeLocalHttpMessageBodyWriter(JsonMapper jsonMapper, byte[] input, int maxSize) { + this.jsonMapper = jsonMapper; this.input = input; this.maxSize = maxSize; - this.maxSizeFilter = new MaxSizeJsonFilter(maxSize, jsonFactory); + this.maxSizeFilter = new MaxSizeJsonFilter(maxSize, jsonMapper); } public void prepareResult() { @@ -47,10 +51,10 @@ public void writeBody(JsonGenerator generator) throws IOException { HttpMessageStateResult output = this.output; if(output.isWellformed()) { - generator.writeFieldName("body"); + generator.writeName("body"); generator.writeRawValue(output.getBody()); } else { - generator.writeStringField("body", output.getBody()); + generator.writeStringProperty("body", output.getBody()); } } diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/MaxSizeRemoteHttpMessageBodyWriter.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/MaxSizeRemoteHttpMessageBodyWriter.java index ff7b4064..3408d590 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/MaxSizeRemoteHttpMessageBodyWriter.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/MaxSizeRemoteHttpMessageBodyWriter.java @@ -1,9 +1,9 @@ package no.entur.logging.cloud.logbook.ondemand; -import com.fasterxml.jackson.core.JsonFactory; import no.entur.logging.cloud.logbook.ondemand.state.HttpMessageState; import no.entur.logging.cloud.logbook.ondemand.state.HttpMessageStateResult; import no.entur.logging.cloud.logbook.ondemand.state.HttpMessageStateSupplier; +import tools.jackson.databind.json.JsonMapper; import java.nio.charset.StandardCharsets; @@ -11,8 +11,8 @@ public class MaxSizeRemoteHttpMessageBodyWriter extends MaxSizeLocalHttpMessageB protected final HttpMessageStateSupplier httpMessageStateSupplier; - public MaxSizeRemoteHttpMessageBodyWriter(JsonFactory jsonFactory, byte[] input, int maxSize, HttpMessageStateSupplier httpMessageStateSupplier) { - super(jsonFactory, input, maxSize); + public MaxSizeRemoteHttpMessageBodyWriter(JsonMapper jsonMapper, byte[] input, int maxSize, HttpMessageStateSupplier httpMessageStateSupplier) { + super(jsonMapper, input, maxSize); this.httpMessageStateSupplier = httpMessageStateSupplier; } diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/OndemandLogLevelLogstashLogbackSink.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/OndemandLogLevelLogstashLogbackSink.java index 80a13a1c..18d5df9c 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/OndemandLogLevelLogstashLogbackSink.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/OndemandLogLevelLogstashLogbackSink.java @@ -1,6 +1,5 @@ package no.entur.logging.cloud.logbook.ondemand; -import com.fasterxml.jackson.core.JsonFactory; import no.entur.logging.cloud.logbook.AbstractLogLevelLogstashLogbackSink; import no.entur.logging.cloud.logbook.DefaultRemoteHttpMessageContextSupplier; import no.entur.logging.cloud.logbook.MessageComposer; @@ -10,6 +9,7 @@ import no.entur.logging.cloud.logbook.ondemand.state.ResponseHttpMessageStateSupplierSource; import org.slf4j.Marker; import org.zalando.logbook.*; +import tools.jackson.databind.json.JsonMapper; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -44,24 +44,24 @@ public OndemandLogLevelLogstashLogbackSink build() { if (level == null) { throw new IllegalStateException("Expected log level"); } - if (jsonFactory == null) { - jsonFactory = new JsonFactory(); + if (jsonMapper == null) { + jsonMapper = JsonMapper.builder().build(); } if (remoteHttpMessageContextSupplier == null) { remoteHttpMessageContextSupplier = new DefaultRemoteHttpMessageContextSupplier(); } return new OndemandLogLevelLogstashLogbackSink(loggerToBiConsumer(), logEnabledToBooleanSupplier(), - jsonFactory, requestBodyWellformedDecisionSupplier, responseBodyWellformedDecisionSupplier, + jsonMapper, requestBodyWellformedDecisionSupplier, responseBodyWellformedDecisionSupplier, maxBodySize, maxSize, remoteHttpMessageContextSupplier, server, client); } } public OndemandLogLevelLogstashLogbackSink(BiConsumer logConsumer, BooleanSupplier logLevelEnabled, - JsonFactory jsonFactory, RequestHttpMessageStateSupplierSource requestHttpMessageStateSupplierSource, + JsonMapper jsonMapper, RequestHttpMessageStateSupplierSource requestHttpMessageStateSupplierSource, ResponseHttpMessageStateSupplierSource responseHttpMessageStateSupplierSource, int maxBodySize, int maxSize, RemoteHttpMessageContextSupplier remoteHttpMessageContextSupplier, MessageComposer server, MessageComposer client) { - super(logConsumer, logLevelEnabled, jsonFactory, requestHttpMessageStateSupplierSource, + super(logConsumer, logLevelEnabled, jsonMapper, requestHttpMessageStateSupplierSource, responseHttpMessageStateSupplierSource, maxBodySize, maxSize, remoteHttpMessageContextSupplier, server, client); } @@ -78,7 +78,7 @@ public Marker createRequestMarker(HttpRequest request) { if (body.length < maxBodySize) { writer = new LocalHttpMessageBodyWriter(body); } else { - writer = new MaxSizeLocalHttpMessageBodyWriter(jsonFactory, body, maxBodySize); + writer = new MaxSizeLocalHttpMessageBodyWriter(jsonMapper, body, maxBodySize); } } else { boolean verify = remoteHttpMessageContextSupplier.verifyJsonSyntax(request); @@ -86,9 +86,9 @@ public Marker createRequestMarker(HttpRequest request) { HttpMessageStateSupplier httpMessageStateSupplier = requestHttpMessageStateSupplierSource .get(); if (body.length < maxBodySize) { - writer = new RemoteHttpMessageBodyWriter(jsonFactory, body, httpMessageStateSupplier); + writer = new RemoteHttpMessageBodyWriter(jsonMapper, body, httpMessageStateSupplier); } else { - writer = new MaxSizeRemoteHttpMessageBodyWriter(jsonFactory, body, maxSize, + writer = new MaxSizeRemoteHttpMessageBodyWriter(jsonMapper, body, maxSize, httpMessageStateSupplier); } } else { @@ -96,7 +96,7 @@ public Marker createRequestMarker(HttpRequest request) { if (body.length < maxBodySize) { writer = new LocalHttpMessageBodyWriter(body); } else { - writer = new MaxSizeLocalHttpMessageBodyWriter(jsonFactory, body, maxBodySize); + writer = new MaxSizeLocalHttpMessageBodyWriter(jsonMapper, body, maxBodySize); } } } @@ -136,7 +136,7 @@ public Marker createResponseMarker(Correlation correlation, HttpResponse respons if (body.length < maxBodySize) { writer = new LocalHttpMessageBodyWriter(body); } else { - writer = new MaxSizeLocalHttpMessageBodyWriter(jsonFactory, body, maxBodySize); + writer = new MaxSizeLocalHttpMessageBodyWriter(jsonMapper, body, maxBodySize); } } else { boolean verify = remoteHttpMessageContextSupplier.verifyJsonSyntax(response); @@ -144,9 +144,9 @@ public Marker createResponseMarker(Correlation correlation, HttpResponse respons HttpMessageStateSupplier httpMessageStateSupplier = responseHttpMessageStateSupplierSource .get(); if (body.length < maxBodySize) { - writer = new RemoteHttpMessageBodyWriter(jsonFactory, body, httpMessageStateSupplier); + writer = new RemoteHttpMessageBodyWriter(jsonMapper, body, httpMessageStateSupplier); } else { - writer = new MaxSizeRemoteHttpMessageBodyWriter(jsonFactory, body, maxSize, + writer = new MaxSizeRemoteHttpMessageBodyWriter(jsonMapper, body, maxSize, httpMessageStateSupplier); } } else { @@ -154,7 +154,7 @@ public Marker createResponseMarker(Correlation correlation, HttpResponse respons if (body.length < maxBodySize) { writer = new LocalHttpMessageBodyWriter(body); } else { - writer = new MaxSizeLocalHttpMessageBodyWriter(jsonFactory, body, maxBodySize); + writer = new MaxSizeLocalHttpMessageBodyWriter(jsonMapper, body, maxBodySize); } } } diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/RemoteHttpMessageBodyWriter.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/RemoteHttpMessageBodyWriter.java index d8679e91..184d3fd2 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/RemoteHttpMessageBodyWriter.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/RemoteHttpMessageBodyWriter.java @@ -1,11 +1,11 @@ package no.entur.logging.cloud.logbook.ondemand; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; +import tools.jackson.core.JsonGenerator; import no.entur.logging.cloud.logbook.ondemand.state.HttpMessageState; import no.entur.logging.cloud.logbook.ondemand.state.HttpMessageStateResult; import no.entur.logging.cloud.logbook.ondemand.state.HttpMessageStateSupplier; +import tools.jackson.core.JsonParser; +import tools.jackson.databind.json.JsonMapper; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -16,12 +16,12 @@ public class RemoteHttpMessageBodyWriter extends LocalHttpMessageBodyWriter { protected final HttpMessageStateSupplier httpMessageStateSupplier; protected volatile HttpMessageStateResult output; - protected final JsonFactory jsonFactory; + protected final JsonMapper jsonMapper; - public RemoteHttpMessageBodyWriter(JsonFactory jsonFactory, byte[] input, HttpMessageStateSupplier httpMessageStateSupplier) { + public RemoteHttpMessageBodyWriter(JsonMapper jsonMapper, byte[] input, HttpMessageStateSupplier httpMessageStateSupplier) { super(input); - this.jsonFactory = jsonFactory; + this.jsonMapper = jsonMapper; this.httpMessageStateSupplier = httpMessageStateSupplier; } @@ -49,15 +49,15 @@ public void writeBody(JsonGenerator generator) throws IOException { this.output = output = createOutput(); } if(output.isWellformed()) { - generator.writeFieldName("body"); + generator.writeName("body"); generator.writeRawValue(output.getBody()); } else { - generator.writeStringField("body", output.getBody()); + generator.writeStringProperty("body", output.getBody()); } } protected boolean isWellformedJson() { - try (JsonParser parser = jsonFactory.createParser(new ByteArrayInputStream(input))) { + try (JsonParser parser = jsonMapper.createParser(new ByteArrayInputStream(input))) { while(parser.nextToken() != null); } catch(Exception e) { return false; diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/RequestOndemandSingleFieldAppendingMarker.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/RequestOndemandSingleFieldAppendingMarker.java index 405661f8..5112cfb1 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/RequestOndemandSingleFieldAppendingMarker.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/RequestOndemandSingleFieldAppendingMarker.java @@ -1,6 +1,6 @@ package no.entur.logging.cloud.logbook.ondemand; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import net.logstash.logback.marker.SingleFieldAppendingMarker; import org.zalando.logbook.HttpRequest; import org.zalando.logbook.Origin; @@ -46,22 +46,22 @@ protected void prepareForDeferredProcessing(HttpRequest message) { } @Override - protected void writeFieldValue(JsonGenerator generator) throws IOException { + protected void writeFieldValue(JsonGenerator generator) { generator.writeStartObject(); - generator.writeStringField("origin", origin); - generator.writeStringField("type", "request"); - generator.writeStringField("protocol", protocol); - generator.writeStringField("remote", remote); - generator.writeStringField("method", method); - generator.writeStringField("uri", uri); - generator.writeStringField("host", host); - generator.writeStringField("path", path); - generator.writeStringField("scheme", scheme); + generator.writeStringProperty("origin", origin); + generator.writeStringProperty("type", "request"); + generator.writeStringProperty("protocol", protocol); + generator.writeStringProperty("remote", remote); + generator.writeStringProperty("method", method); + generator.writeStringProperty("uri", uri); + generator.writeStringProperty("host", host); + generator.writeStringProperty("path", path); + generator.writeStringProperty("scheme", scheme); if(port.isEmpty()) { - generator.writeNumberField("port", 80); + generator.writeNumberProperty("port", 80); } else { - generator.writeNumberField("port", port.get()); + generator.writeNumberProperty("port", port.get()); } writeHeaders(generator); diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/ResponseOndemandSingleFieldAppendingMarker.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/ResponseOndemandSingleFieldAppendingMarker.java index 00ae2e66..5e22ea5a 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/ResponseOndemandSingleFieldAppendingMarker.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/ResponseOndemandSingleFieldAppendingMarker.java @@ -1,6 +1,6 @@ package no.entur.logging.cloud.logbook.ondemand; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import net.logstash.logback.marker.SingleFieldAppendingMarker; import org.zalando.logbook.HttpResponse; import org.zalando.logbook.Origin; @@ -36,20 +36,20 @@ protected void prepareForDeferredProcessing(HttpResponse message) { } @Override - protected void writeFieldValue(JsonGenerator generator) throws IOException { + protected void writeFieldValue(JsonGenerator generator) { generator.writeStartObject(); if(origin != null) { - generator.writeStringField("origin", origin); + generator.writeStringProperty("origin", origin); } - generator.writeStringField("type", "response"); + generator.writeStringProperty("type", "response"); if(duration != null) { - generator.writeNumberField("duration", duration.toMillis()); + generator.writeNumberProperty("duration", duration.toMillis()); } if(protocol != null) { - generator.writeStringField("protocol", protocol); + generator.writeStringProperty("protocol", protocol); } - generator.writeNumberField("status", status); + generator.writeNumberProperty("status", status); writeHeaders(generator); writeBody(generator); diff --git a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/StringHttpMessageBodyWriter.java b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/StringHttpMessageBodyWriter.java index 586ac29b..90a5f9b4 100644 --- a/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/StringHttpMessageBodyWriter.java +++ b/request-response/logbook/src/main/java/no/entur/logging/cloud/logbook/ondemand/StringHttpMessageBodyWriter.java @@ -1,6 +1,6 @@ package no.entur.logging.cloud.logbook.ondemand; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -20,7 +20,7 @@ public void prepareResult() { @Override public void writeBody(JsonGenerator generator) throws IOException { - generator.writeStringField("body", input); + generator.writeStringProperty("body", input); } } diff --git a/request-response/logbook/src/test/java/no/entur/logging/cloud/logbook/AbstractLogLevelLogstashLogbackSinkTest.java b/request-response/logbook/src/test/java/no/entur/logging/cloud/logbook/AbstractLogLevelLogstashLogbackSinkTest.java index 322e8212..dbdd8b41 100644 --- a/request-response/logbook/src/test/java/no/entur/logging/cloud/logbook/AbstractLogLevelLogstashLogbackSinkTest.java +++ b/request-response/logbook/src/test/java/no/entur/logging/cloud/logbook/AbstractLogLevelLogstashLogbackSinkTest.java @@ -1,13 +1,12 @@ package no.entur.logging.cloud.logbook; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.databind.MappingJsonFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.slf4j.Marker; import org.zalando.logbook.HttpRequest; import org.zalando.logbook.HttpResponse; import org.zalando.logbook.Origin; +import tools.jackson.databind.json.JsonMapper; import java.io.IOException; import java.time.Duration; @@ -22,8 +21,8 @@ public class AbstractLogLevelLogstashLogbackSinkTest { public static class MockLogLevelLogstashLogbackSink extends AbstractLogLevelLogstashLogbackSink { - public MockLogLevelLogstashLogbackSink(BiConsumer logConsumer, BooleanSupplier logLevelEnabled, JsonFactory jsonFactory, int maxSize, RemoteHttpMessageContextSupplier remoteHttpMessageContextSupplier, MessageComposer server, MessageComposer client) { - super(logConsumer, logLevelEnabled, jsonFactory, maxSize, remoteHttpMessageContextSupplier, server, client); + public MockLogLevelLogstashLogbackSink(BiConsumer logConsumer, BooleanSupplier logLevelEnabled, JsonMapper jsonMapper, int maxSize, RemoteHttpMessageContextSupplier remoteHttpMessageContextSupplier, MessageComposer server, MessageComposer client) { + super(logConsumer, logLevelEnabled, jsonMapper, maxSize, remoteHttpMessageContextSupplier, server, client); } @Override @@ -183,7 +182,8 @@ private MockLogLevelLogstashLogbackSink createSink() { MessageComposer server = mock(MessageComposer.class); MessageComposer client = mock(MessageComposer.class); BooleanSupplier logLevelEnabled = () -> true; - MockLogLevelLogstashLogbackSink sink = new MockLogLevelLogstashLogbackSink(logConsumer, logLevelEnabled, new MappingJsonFactory(), maxSize, remoteHttpMessageContextSupplier, server, client); + + MockLogLevelLogstashLogbackSink sink = new MockLogLevelLogstashLogbackSink(logConsumer, logLevelEnabled, JsonMapper.builder().build(), maxSize, remoteHttpMessageContextSupplier, server, client); return spy(sink); } diff --git a/request-response/netty-grpc-test/build.gradle b/request-response/netty-grpc-test/build.gradle index 81e0a8ea..959c79d2 100644 --- a/request-response/netty-grpc-test/build.gradle +++ b/request-response/netty-grpc-test/build.gradle @@ -3,11 +3,11 @@ dependencies { api project(':request-response:netty-grpc') api project(":test:test-logback") - api ("org.entur.jackson:jackson-syntax-highlight:${jacksonSyntaxHighlightVersion}") + api ("org.entur.jackson:jackson-tools-syntax-highlight:${jacksonSyntaxHighlightVersion}") api ("org.entur.logback-logstash-syntax-highlighting-decorators:logback-logstash-syntax-highlighting-decorators:${logbackLogstashSyntaxHighlightingDecoratorsVersion}") api ("net.logstash.logback:logstash-logback-encoder:${logbackLogstashVersion}") - api("com.fasterxml.jackson.core:jackson-core") + api("tools.jackson.core:jackson-core") api("org.apache.commons:commons-text:${commonsTextVersion}") diff --git a/request-response/netty-grpc-test/src/main/java/no/entur/logging/cloud/rr/grpc/test/PrettyPrintingGrpcSink.java b/request-response/netty-grpc-test/src/main/java/no/entur/logging/cloud/rr/grpc/test/PrettyPrintingGrpcSink.java index 9036c9d0..4a4ae15f 100644 --- a/request-response/netty-grpc-test/src/main/java/no/entur/logging/cloud/rr/grpc/test/PrettyPrintingGrpcSink.java +++ b/request-response/netty-grpc-test/src/main/java/no/entur/logging/cloud/rr/grpc/test/PrettyPrintingGrpcSink.java @@ -1,11 +1,10 @@ package no.entur.logging.cloud.rr.grpc.test; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import org.entur.jackson.jsh.AnsiSyntaxHighlight; -import org.entur.jackson.jsh.SyntaxHighlighter; -import org.entur.jackson.jsh.SyntaxHighlightingJsonGenerator; +import org.entur.jackson.tools.jsh.AnsiSyntaxHighlight; +import org.entur.jackson.tools.jsh.SyntaxHighlighter; +import org.entur.jackson.tools.jsh.SyntaxHighlightingJsonGenerator; +import org.entur.jackson.tools.jsh.SyntaxHighlightingPrettyPrinter; +import tools.jackson.core.JsonGenerator; import no.entur.logging.cloud.rr.grpc.AbstractSinkBuilder; import no.entur.logging.cloud.rr.grpc.LogbackLogstashGrpcSink; import no.entur.logging.cloud.rr.grpc.message.GrpcConnect; @@ -13,6 +12,11 @@ import no.entur.logging.cloud.rr.grpc.message.GrpcRequest; import no.entur.logging.cloud.rr.grpc.message.GrpcResponse; import org.slf4j.Marker; +import tools.jackson.core.JsonParser; +import tools.jackson.core.PrettyPrinter; +import tools.jackson.core.json.JsonFactory; +import tools.jackson.databind.SerializationFeature; +import tools.jackson.databind.json.JsonMapper; import java.io.IOException; import java.io.StringWriter; @@ -44,19 +48,24 @@ public PrettyPrintingGrpcSink build() { throw new IllegalStateException("Expected Json syntax highlighter level"); } - return new PrettyPrintingGrpcSink(logEnabledToBooleanSupplier(), loggerToBiConsumer(), new JsonFactory(), syntaxHighlighter); + JsonMapper mapper = JsonMapper.builder().defaultPrettyPrinter(new SyntaxHighlightingPrettyPrinter(syntaxHighlighter)) + .configure(SerializationFeature.INDENT_OUTPUT, true) + .build(); + + return new PrettyPrintingGrpcSink(logEnabledToBooleanSupplier(), loggerToBiConsumer(), mapper, syntaxHighlighter); } } + protected final BiConsumer logConsumer; - protected final JsonFactory jsonFactory; + protected final JsonMapper mapper; protected final SyntaxHighlighter syntaxHighlighter; - public PrettyPrintingGrpcSink(BooleanSupplier logLevelEnabled, BiConsumer logConsumer, JsonFactory jsonFactory, SyntaxHighlighter syntaxHighlighter) { + public PrettyPrintingGrpcSink(BooleanSupplier logLevelEnabled, BiConsumer logConsumer, JsonMapper mapper, SyntaxHighlighter syntaxHighlighter) { super(logConsumer, logLevelEnabled); this.logConsumer = logConsumer; - this.jsonFactory = jsonFactory; + this.mapper = mapper; this.syntaxHighlighter = syntaxHighlighter; } @@ -167,11 +176,13 @@ public String prettyPrint(String body) { if (body != null && body.length() > 0) { try ( - JsonParser parser = jsonFactory.createParser(body); - StringWriter writer = new StringWriter(body.length() * 2); - JsonGenerator generator = jsonFactory.createGenerator(writer); + JsonParser parser = mapper.createParser(body); + StringWriter writer = new StringWriter(body.length() * 2); + JsonGenerator generator = mapper.createGenerator(writer); ) { - JsonGenerator jsonGenerator = new SyntaxHighlightingJsonGenerator(generator, syntaxHighlighter,true); + SyntaxHighlightingPrettyPrinter prettyPrinter = (SyntaxHighlightingPrettyPrinter) generator.getPrettyPrinter(); + + JsonGenerator jsonGenerator = new SyntaxHighlightingJsonGenerator(generator, prettyPrinter, prettyPrinter.getObjectIndenter(), prettyPrinter.getArrayIndenter(), prettyPrinter.getSyntaxHighlighter()); while (parser.nextToken() != null) { jsonGenerator.copyCurrentEvent(parser); } diff --git a/request-response/netty-grpc-test/src/main/java/no/entur/logging/cloud/rr/grpc/test/PrettyPrintingRequestSingleFieldAppendingMarker.java b/request-response/netty-grpc-test/src/main/java/no/entur/logging/cloud/rr/grpc/test/PrettyPrintingRequestSingleFieldAppendingMarker.java index 5f980d38..d75f2dde 100644 --- a/request-response/netty-grpc-test/src/main/java/no/entur/logging/cloud/rr/grpc/test/PrettyPrintingRequestSingleFieldAppendingMarker.java +++ b/request-response/netty-grpc-test/src/main/java/no/entur/logging/cloud/rr/grpc/test/PrettyPrintingRequestSingleFieldAppendingMarker.java @@ -1,11 +1,12 @@ package no.entur.logging.cloud.rr.grpc.test; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.PrettyPrinter; +import tools.jackson.core.JsonGenerator; import no.entur.logging.cloud.rr.grpc.marker.GrpcRequestMarker; import no.entur.logging.cloud.rr.grpc.message.GrpcRequest; +import tools.jackson.core.JsonParser; +import tools.jackson.core.PrettyPrinter; +import tools.jackson.core.TokenStreamFactory; +import tools.jackson.core.json.JsonFactory; import java.io.IOException; @@ -17,14 +18,14 @@ public PrettyPrintingRequestSingleFieldAppendingMarker(GrpcRequest message) { } @Override - protected void writeBodyField(JsonGenerator generator, String body) throws IOException { - generator.writeFieldName("body"); + protected void writeBodyField(JsonGenerator generator, String body) { + generator.writeName("body"); final PrettyPrinter prettyPrinter = generator.getPrettyPrinter(); if (prettyPrinter == null || isRawStringValue(body)) { generator.writeRawValue(body); } else { - final JsonFactory factory = generator.getCodec().getFactory(); + final TokenStreamFactory factory = generator.objectWriteContext().tokenStreamFactory(); // append to existing tree event by event try (final JsonParser parser = factory.createParser(body)) { diff --git a/request-response/netty-grpc-test/src/main/java/no/entur/logging/cloud/rr/grpc/test/PrettyPrintingResponseSingleFieldAppendingMarker.java b/request-response/netty-grpc-test/src/main/java/no/entur/logging/cloud/rr/grpc/test/PrettyPrintingResponseSingleFieldAppendingMarker.java index 73cfd7be..c77d68bf 100644 --- a/request-response/netty-grpc-test/src/main/java/no/entur/logging/cloud/rr/grpc/test/PrettyPrintingResponseSingleFieldAppendingMarker.java +++ b/request-response/netty-grpc-test/src/main/java/no/entur/logging/cloud/rr/grpc/test/PrettyPrintingResponseSingleFieldAppendingMarker.java @@ -1,11 +1,13 @@ package no.entur.logging.cloud.rr.grpc.test; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.PrettyPrinter; +import tools.jackson.core.JsonGenerator; import no.entur.logging.cloud.rr.grpc.marker.GrpcResponseMarker; import no.entur.logging.cloud.rr.grpc.message.GrpcResponse; +import tools.jackson.core.JsonParser; +import tools.jackson.core.PrettyPrinter; +import tools.jackson.core.TokenStreamFactory; +import tools.jackson.core.json.JsonFactory; + import java.io.IOException; public class PrettyPrintingResponseSingleFieldAppendingMarker extends GrpcResponseMarker { @@ -15,14 +17,14 @@ public PrettyPrintingResponseSingleFieldAppendingMarker(GrpcResponse message) { } @Override - protected void writeBodyField(JsonGenerator generator, String body) throws IOException { - generator.writeFieldName("body"); + protected void writeBodyField(JsonGenerator generator, String body) { + generator.writeName("body"); final PrettyPrinter prettyPrinter = generator.getPrettyPrinter(); if (prettyPrinter == null || isRawStringValue(body)) { generator.writeRawValue(body); } else { - final JsonFactory factory = generator.getCodec().getFactory(); + final TokenStreamFactory factory = generator.objectWriteContext().tokenStreamFactory(); // append to existing tree event by event try (final JsonParser parser = factory.createParser(body)) { diff --git a/request-response/netty-grpc/build.gradle b/request-response/netty-grpc/build.gradle index 31bf2d38..d30cb92b 100644 --- a/request-response/netty-grpc/build.gradle +++ b/request-response/netty-grpc/build.gradle @@ -8,7 +8,7 @@ dependencies { api("com.fasterxml.jackson.core:jackson-databind") api("com.fasterxml.jackson.core:jackson-annotations") - api("com.fasterxml.jackson.core:jackson-core") + api("tools.jackson.core:jackson-core") api("io.grpc:grpc-netty:${grpcNettyVersion}") api("io.grpc:grpc-services:${grpcNettyVersion}") diff --git a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/mapper/DefaultMetadataJsonMapper.java b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/mapper/DefaultMetadataJsonMapper.java index 8eb86ff3..c41ab584 100644 --- a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/mapper/DefaultMetadataJsonMapper.java +++ b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/mapper/DefaultMetadataJsonMapper.java @@ -1,6 +1,6 @@ package no.entur.logging.cloud.rr.grpc.mapper; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.StdSerializer; @@ -72,7 +72,7 @@ protected RawSerializer() { } @Override - public void serialize(RawString value, JsonGenerator gen, SerializerProvider provider) throws IOException { + public void serialize(RawString value, com.fasterxml.jackson.core.JsonGenerator gen, SerializerProvider provider) throws IOException { gen.writeRaw(value.getString()); } } diff --git a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcConnectionMarker.java b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcConnectionMarker.java index 85f2ca9d..ed0936f2 100644 --- a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcConnectionMarker.java +++ b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcConnectionMarker.java @@ -1,6 +1,6 @@ package no.entur.logging.cloud.rr.grpc.marker; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import net.logstash.logback.marker.LogstashMarker; import no.entur.logging.cloud.rr.grpc.message.GrpcMessage; @@ -21,8 +21,8 @@ protected GrpcConnectionMarker(String name, T message) { } @Override - public void writeTo(JsonGenerator generator) throws IOException { - generator.writeFieldName("http"); + public void writeTo(JsonGenerator generator) { + generator.writeName("http"); generator.writeStartObject(); writeFields(generator); @@ -30,34 +30,34 @@ public void writeTo(JsonGenerator generator) throws IOException { generator.writeEndObject(); } - protected void writeFields(JsonGenerator generator) throws IOException { + protected void writeFields(JsonGenerator generator) { String uri = message.getUri(); if(uri != null) { - generator.writeFieldName("uri"); + generator.writeName("uri"); generator.writeString(uri); } String type = message.getType(); if(type != null) { - generator.writeFieldName("type"); + generator.writeName("type"); generator.writeString(type); } String remote = message.getRemote(); if(remote != null) { - generator.writeFieldName("remote"); + generator.writeName("remote"); generator.writeString(remote); } String origin = message.getOrigin(); if(origin != null) { - generator.writeFieldName("origin"); + generator.writeName("origin"); generator.writeString(origin); } Map headers = message.getHeaders(); - generator.writeFieldName("headers"); + generator.writeName("headers"); generator.writeStartObject(); if(headers != null) { @@ -65,7 +65,7 @@ protected void writeFields(JsonGenerator generator) throws IOException { String key = entry.getKey(); if(key != null && !key.isEmpty()) { - generator.writeFieldName(key.toLowerCase()); + generator.writeName(key.toLowerCase()); generator.writeStartArray(); Object value = entry.getValue(); @@ -73,10 +73,10 @@ protected void writeFields(JsonGenerator generator) throws IOException { if (value instanceof List) { List values = (List) value; for (Object listValue : values) { - generator.writeObject(listValue); + generator.writePOJO(listValue); } } else { - generator.writeObject(value); + generator.writePOJO(value); } } generator.writeEndArray(); diff --git a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcRequestMarker.java b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcRequestMarker.java index 680d3eb9..1d1f382b 100644 --- a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcRequestMarker.java +++ b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcRequestMarker.java @@ -1,6 +1,6 @@ package no.entur.logging.cloud.rr.grpc.marker; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import no.entur.logging.cloud.rr.grpc.message.GrpcRequest; import java.io.IOException; @@ -14,12 +14,12 @@ public GrpcRequestMarker(GrpcRequest message) { } @Override - protected void writeFields(JsonGenerator generator) throws IOException { + protected void writeFields(JsonGenerator generator) { super.writeFields(generator); long timeRemaining = message.getTimeRemainingUntilDeadlineInMilliseconds(); if(timeRemaining != -1L) { - generator.writeFieldName("deadline-in"); + generator.writeName("deadline-in"); generator.writeNumber(timeRemaining); } @@ -29,8 +29,8 @@ protected void writeFields(JsonGenerator generator) throws IOException { } } - protected void writeBodyField(JsonGenerator generator, String body) throws IOException { - generator.writeFieldName("body"); + protected void writeBodyField(JsonGenerator generator, String body) { + generator.writeName("body"); generator.writeRawValue(body); } diff --git a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcResponseMarker.java b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcResponseMarker.java index bd3006dc..14dedab3 100644 --- a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcResponseMarker.java +++ b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcResponseMarker.java @@ -1,6 +1,6 @@ package no.entur.logging.cloud.rr.grpc.marker; -import com.fasterxml.jackson.core.JsonGenerator; +import tools.jackson.core.JsonGenerator; import no.entur.logging.cloud.rr.grpc.message.GrpcResponse; import java.io.IOException; @@ -14,8 +14,8 @@ public GrpcResponseMarker(GrpcResponse message) { } @Override - protected void writeFields(JsonGenerator generator) throws IOException { - generator.writeFieldName("status"); + protected void writeFields(JsonGenerator generator) { + generator.writeName("status"); generator.writeNumber(message.getStatusCode().value()); super.writeFields(generator); @@ -26,8 +26,8 @@ protected void writeFields(JsonGenerator generator) throws IOException { } } - protected void writeBodyField(JsonGenerator generator, String body) throws IOException { - generator.writeFieldName("body"); + protected void writeBodyField(JsonGenerator generator, String body) { + generator.writeName("body"); generator.writeRawValue(body); } diff --git a/request-response/request-response-spring-boot-autoconfigure-grpc-ecosystem/README.md b/request-response/request-response-spring-boot-autoconfigure-grpc-ecosystem/README.md deleted file mode 100644 index 3d74e45c..00000000 --- a/request-response/request-response-spring-boot-autoconfigure-grpc-ecosystem/README.md +++ /dev/null @@ -1 +0,0 @@ -# request-response-logging for ecosystem grpc diff --git a/request-response/request-response-spring-boot-autoconfigure-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/request-response/request-response-spring-boot-autoconfigure-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 4e5237da..00000000 --- a/request-response/request-response-spring-boot-autoconfigure-grpc-ecosystem/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -no.entur.logging.cloud.spring.grpc.ecosystem.RequestResponseGrpcEcosystemAutoConfiguration \ No newline at end of file diff --git a/request-response/request-response-spring-boot-autoconfigure-grpc-spring/README.md b/request-response/request-response-spring-boot-autoconfigure-grpc-spring/README.md new file mode 100644 index 00000000..75678b8b --- /dev/null +++ b/request-response/request-response-spring-boot-autoconfigure-grpc-spring/README.md @@ -0,0 +1 @@ +# request-response-logging for spring grpc diff --git a/request-response/request-response-spring-boot-autoconfigure-grpc-ecosystem/build.gradle b/request-response/request-response-spring-boot-autoconfigure-grpc-spring/build.gradle similarity index 83% rename from request-response/request-response-spring-boot-autoconfigure-grpc-ecosystem/build.gradle rename to request-response/request-response-spring-boot-autoconfigure-grpc-spring/build.gradle index 436831d5..9314618a 100644 --- a/request-response/request-response-spring-boot-autoconfigure-grpc-ecosystem/build.gradle +++ b/request-response/request-response-spring-boot-autoconfigure-grpc-spring/build.gradle @@ -10,7 +10,7 @@ dependencies { api ("org.springframework.boot:spring-boot-autoconfigure") api ("org.springframework.boot:spring-boot-starter-logging") - api("net.devh:grpc-server-spring-boot-starter:${ecosystemGrpcVersion}") + api("org.springframework.grpc:spring-grpc-server-spring-boot-starter:${springGrpcVersion}") testImplementation("org.springframework.boot:spring-boot-starter-test") } diff --git a/request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/java/no/entur/logging/cloud/spring/grpc/spring/RequestResponseExceptionHandlerGrpcSpringAutoConfiguration.java b/request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/java/no/entur/logging/cloud/spring/grpc/spring/RequestResponseExceptionHandlerGrpcSpringAutoConfiguration.java new file mode 100644 index 00000000..6ca34de9 --- /dev/null +++ b/request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/java/no/entur/logging/cloud/spring/grpc/spring/RequestResponseExceptionHandlerGrpcSpringAutoConfiguration.java @@ -0,0 +1,33 @@ +package no.entur.logging.cloud.spring.grpc.spring; + +import no.entur.logging.cloud.spring.rr.grpc.RequestResponseGrpcExceptionHandlerInterceptor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.grpc.server.autoconfigure.exception.GrpcExceptionHandlerAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.grpc.server.exception.GrpcExceptionHandlerInterceptor; + +/** + * + * We need the proper error handling to run before the response is logged, i.e. to make sure no exception is thrown through the + * request-response interceptor, we wrap the system error handler to run in an additional interceptor and make it run first. + * . + * + */ + +@Configuration +@AutoConfigureAfter(GrpcExceptionHandlerAutoConfiguration.class) +public class RequestResponseExceptionHandlerGrpcSpringAutoConfiguration { + + @Value("${entur.logging.request-response.grpc.server.exception-handler.interceptor-order:400}") + private int exceptionInterceptorOrder; + + @Bean + @ConditionalOnProperty(name = {"entur.logging.request-response.grpc.server.exception-handler.enabled"}, havingValue = "true", matchIfMissing = true) + public RequestResponseGrpcExceptionHandlerInterceptor requestResponseGrpcExceptionHandlerInterceptor(GrpcExceptionHandlerInterceptor interceptor) { + return new RequestResponseGrpcExceptionHandlerInterceptor(interceptor, exceptionInterceptorOrder); + } + +} \ No newline at end of file diff --git a/request-response/request-response-spring-boot-autoconfigure-grpc-ecosystem/src/main/java/no/entur/logging/cloud/spring/grpc/ecosystem/RequestResponseGrpcEcosystemAutoConfiguration.java b/request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/java/no/entur/logging/cloud/spring/grpc/spring/RequestResponseGrpcSpringAutoConfiguration.java similarity index 58% rename from request-response/request-response-spring-boot-autoconfigure-grpc-ecosystem/src/main/java/no/entur/logging/cloud/spring/grpc/ecosystem/RequestResponseGrpcEcosystemAutoConfiguration.java rename to request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/java/no/entur/logging/cloud/spring/grpc/spring/RequestResponseGrpcSpringAutoConfiguration.java index ad1ea11c..45f9a84a 100644 --- a/request-response/request-response-spring-boot-autoconfigure-grpc-ecosystem/src/main/java/no/entur/logging/cloud/spring/grpc/ecosystem/RequestResponseGrpcEcosystemAutoConfiguration.java +++ b/request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/java/no/entur/logging/cloud/spring/grpc/spring/RequestResponseGrpcSpringAutoConfiguration.java @@ -1,24 +1,17 @@ -package no.entur.logging.cloud.spring.grpc.ecosystem; +package no.entur.logging.cloud.spring.grpc.spring; -import io.grpc.Status; -import io.grpc.StatusRuntimeException; -import net.devh.boot.grpc.server.advice.GrpcAdvice; -import net.devh.boot.grpc.server.advice.GrpcExceptionHandler; -import net.devh.boot.grpc.server.autoconfigure.GrpcAdviceAutoConfiguration; -import net.devh.boot.grpc.server.error.GrpcExceptionInterceptor; import no.entur.logging.cloud.rr.grpc.GrpcSink; import no.entur.logging.cloud.rr.grpc.filter.GrpcServerLoggingFilters; import no.entur.logging.cloud.rr.grpc.mapper.GrpcMetadataJsonMapper; import no.entur.logging.cloud.rr.grpc.mapper.GrpcPayloadJsonMapper; import no.entur.logging.cloud.spring.rr.grpc.OrderedGrpcLoggingServerInterceptor; -import no.entur.logging.cloud.spring.rr.grpc.RequestResponseGrpcExceptionHandlerInterceptor; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.grpc.server.autoconfigure.exception.GrpcExceptionHandlerAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; /** * @@ -29,13 +22,10 @@ */ @Configuration -@AutoConfigureBefore(GrpcAdviceAutoConfiguration.class) -public class RequestResponseGrpcEcosystemAutoConfiguration { +@AutoConfigureBefore(GrpcExceptionHandlerAutoConfiguration.class) +public class RequestResponseGrpcSpringAutoConfiguration { - @Value("${entur.logging.request-response.grpc.server.exception-handler.interceptor-order:0}") - private int exceptionInterceptorOrder; - - @Value("${entur.logging.request-response.grpc.server.interceptor-order:5175}") + @Value("${entur.logging.request-response.grpc.server.interceptor-order:300}") private int serverInterceptorOrder; @Bean @@ -44,22 +34,16 @@ public OrderedGrpcLoggingServerInterceptor orderedGrpcLoggingServerInterceptor(G return new OrderedGrpcLoggingServerInterceptor(grpcSink, grpcServerLoggingFilters, grpcMetadataJsonMapper, grpcPayloadJsonMapper, serverInterceptorOrder); } - @GrpcAdvice + @Bean @ConditionalOnProperty(name = {"entur.logging.request-response.grpc.server.exception-handler.enabled"}, havingValue = "true", matchIfMissing = true) - public static class StatusRuntimeExceptionGrpcServiceAdvice { - @java.lang.SuppressWarnings("all") - - // this error mapper can be overriden by specifying value in the annotation - @GrpcExceptionHandler - public Status handle(StatusRuntimeException e) { - return e.getStatus(); - } + public StatusRuntimeExceptionExceptionHandler statusRuntimeExceptionExceptionHandler() { + return new StatusRuntimeExceptionExceptionHandler(0); } @Bean @ConditionalOnProperty(name = {"entur.logging.request-response.grpc.server.exception-handler.enabled"}, havingValue = "true", matchIfMissing = true) - public RequestResponseGrpcExceptionHandlerInterceptor requestResponseGRpcExceptionHandlerInterceptor(GrpcExceptionInterceptor interceptor) { - return new RequestResponseGrpcExceptionHandlerInterceptor(interceptor, exceptionInterceptorOrder); + public RuntimeExceptionExceptionHandler runtimeExceptionExceptionHandler() { + return new RuntimeExceptionExceptionHandler(0); } } \ No newline at end of file diff --git a/request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/java/no/entur/logging/cloud/spring/grpc/spring/RuntimeExceptionExceptionHandler.java b/request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/java/no/entur/logging/cloud/spring/grpc/spring/RuntimeExceptionExceptionHandler.java new file mode 100644 index 00000000..041edbad --- /dev/null +++ b/request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/java/no/entur/logging/cloud/spring/grpc/spring/RuntimeExceptionExceptionHandler.java @@ -0,0 +1,29 @@ +package no.entur.logging.cloud.spring.grpc.spring; + +import io.grpc.Status; +import io.grpc.StatusException; +import org.jspecify.annotations.Nullable; +import org.springframework.core.Ordered; +import org.springframework.grpc.server.exception.GrpcExceptionHandler; + +public class RuntimeExceptionExceptionHandler implements GrpcExceptionHandler, Ordered { + + private final int order; + + public RuntimeExceptionExceptionHandler(int order) { + this.order = order; + } + + @Override + public @Nullable StatusException handleException(Throwable e) { + if (e instanceof RuntimeException s) { + return Status.INTERNAL.withDescription(s.getMessage()).asException(); + } + return null; + } + + @Override + public int getOrder() { + return order; + } +} diff --git a/request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/java/no/entur/logging/cloud/spring/grpc/spring/StatusRuntimeExceptionExceptionHandler.java b/request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/java/no/entur/logging/cloud/spring/grpc/spring/StatusRuntimeExceptionExceptionHandler.java new file mode 100644 index 00000000..fe762368 --- /dev/null +++ b/request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/java/no/entur/logging/cloud/spring/grpc/spring/StatusRuntimeExceptionExceptionHandler.java @@ -0,0 +1,29 @@ +package no.entur.logging.cloud.spring.grpc.spring; + +import io.grpc.StatusException; +import io.grpc.StatusRuntimeException; +import org.jspecify.annotations.Nullable; +import org.springframework.core.Ordered; +import org.springframework.grpc.server.exception.GrpcExceptionHandler; + +public class StatusRuntimeExceptionExceptionHandler implements GrpcExceptionHandler, Ordered { + + private final int order; + + public StatusRuntimeExceptionExceptionHandler(int order) { + this.order = order; + } + + @Override + public @Nullable StatusException handleException(Throwable e) { + if (e instanceof StatusRuntimeException s) { + return s.getStatus().withDescription(e.getMessage()).asException(); + } + return null; + } + + @Override + public int getOrder() { + return order; + } +} diff --git a/request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..e259930d --- /dev/null +++ b/request-response/request-response-spring-boot-autoconfigure-grpc-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +no.entur.logging.cloud.spring.grpc.spring.RequestResponseGrpcSpringAutoConfiguration +no.entur.logging.cloud.spring.grpc.spring.RequestResponseExceptionHandlerGrpcSpringAutoConfiguration \ No newline at end of file diff --git a/request-response/request-response-spring-boot-autoconfigure-grpc/src/main/java/no/entur/logging/cloud/spring/rr/grpc/OrderedGrpcLoggingServerInterceptor.java b/request-response/request-response-spring-boot-autoconfigure-grpc/src/main/java/no/entur/logging/cloud/spring/rr/grpc/OrderedGrpcLoggingServerInterceptor.java index 96384ae6..823d6519 100644 --- a/request-response/request-response-spring-boot-autoconfigure-grpc/src/main/java/no/entur/logging/cloud/spring/rr/grpc/OrderedGrpcLoggingServerInterceptor.java +++ b/request-response/request-response-spring-boot-autoconfigure-grpc/src/main/java/no/entur/logging/cloud/spring/rr/grpc/OrderedGrpcLoggingServerInterceptor.java @@ -17,11 +17,7 @@ public OrderedGrpcLoggingServerInterceptor( GrpcServerLoggingFilters filters, GrpcMetadataJsonMapper metadataJsonMapper, GrpcPayloadJsonMapper payloadJsonMapper, - - @Value("${entur.logging.request-response.grpc.interceptor-order:0}") - int order - - ) { + int order) { super(sink, filters, metadataJsonMapper, payloadJsonMapper); this.order = order; } diff --git a/request-response/request-response-spring-boot-autoconfigure-grpc/src/main/java/no/entur/logging/cloud/spring/rr/grpc/RequestResponseGrpcExceptionHandlerInterceptor.java b/request-response/request-response-spring-boot-autoconfigure-grpc/src/main/java/no/entur/logging/cloud/spring/rr/grpc/RequestResponseGrpcExceptionHandlerInterceptor.java index ce6990d4..d06c6d22 100644 --- a/request-response/request-response-spring-boot-autoconfigure-grpc/src/main/java/no/entur/logging/cloud/spring/rr/grpc/RequestResponseGrpcExceptionHandlerInterceptor.java +++ b/request-response/request-response-spring-boot-autoconfigure-grpc/src/main/java/no/entur/logging/cloud/spring/rr/grpc/RequestResponseGrpcExceptionHandlerInterceptor.java @@ -8,10 +8,10 @@ /** * - * This interceptor duplicates the ecosystem exception interceptor so to handle all errors before the request-response logging + * This interceptor duplicates the spring exception interceptor so to handle all errors before the request-response logging * while still having error handling earlier in the interceptor chain (i.e. for handling authentication errors and so on).

* - * This is useful when doing request-response between authentication and controller while using the ecosystem exception handling. + * This is useful when doing request-response between authentication and controller while using the spring exception handling. */ public class RequestResponseGrpcExceptionHandlerInterceptor implements ServerInterceptor, Ordered { diff --git a/request-response/request-response-spring-boot-autoconfigure-web/src/main/java/no/entur/logging/cloud/spring/logbook/web/HttpMessageStateFilterMvcRegistrations.java b/request-response/request-response-spring-boot-autoconfigure-web/src/main/java/no/entur/logging/cloud/spring/logbook/web/HttpMessageStateFilterMvcRegistrations.java index bdc3fb66..7aec2c81 100644 --- a/request-response/request-response-spring-boot-autoconfigure-web/src/main/java/no/entur/logging/cloud/spring/logbook/web/HttpMessageStateFilterMvcRegistrations.java +++ b/request-response/request-response-spring-boot-autoconfigure-web/src/main/java/no/entur/logging/cloud/spring/logbook/web/HttpMessageStateFilterMvcRegistrations.java @@ -1,6 +1,5 @@ package no.entur.logging.cloud.spring.logbook.web; - -import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations; +import org.springframework.boot.webmvc.autoconfigure.WebMvcRegistrations; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; public class HttpMessageStateFilterMvcRegistrations implements WebMvcRegistrations { diff --git a/request-response/request-response-spring-boot-autoconfigure-web/src/main/java/no/entur/logging/cloud/spring/logbook/web/LogbookWebAutoConfiguration.java b/request-response/request-response-spring-boot-autoconfigure-web/src/main/java/no/entur/logging/cloud/spring/logbook/web/LogbookWebAutoConfiguration.java index 31c4a774..2331339b 100644 --- a/request-response/request-response-spring-boot-autoconfigure-web/src/main/java/no/entur/logging/cloud/spring/logbook/web/LogbookWebAutoConfiguration.java +++ b/request-response/request-response-spring-boot-autoconfigure-web/src/main/java/no/entur/logging/cloud/spring/logbook/web/LogbookWebAutoConfiguration.java @@ -14,8 +14,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations; import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.boot.webmvc.autoconfigure.WebMvcRegistrations; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpStatus; diff --git a/settings.gradle b/settings.gradle index de41fd74..63e4a46f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -13,9 +13,9 @@ include 'micrometer' // GCP include 'gcp:logback-logstash-encoder-gcp', 'gcp:spring-boot-autoconfigure-gcp', 'gcp:spring-boot-autoconfigure-gcp-grpc-mdc', 'gcp:correlation-id-trace-spring-boot-gcp-web' -include 'gcp:spring-boot-starter-gcp-web', 'gcp:spring-boot-starter-gcp-web-test', 'gcp:spring-boot-starter-gcp-grpc-ecosystem-test', 'gcp:spring-boot-starter-gcp-grpc-ecosystem' +include 'gcp:spring-boot-starter-gcp-web', 'gcp:spring-boot-starter-gcp-web-test', 'gcp:spring-boot-starter-gcp-grpc-spring-test', 'gcp:spring-boot-starter-gcp-grpc-spring' include 'gcp:spring-boot-autoconfigure-gcp-test', 'gcp:request-response-spring-boot-starter-gcp-web', 'gcp:request-response-spring-boot-starter-gcp-web-test' -include 'gcp:request-response-spring-boot-starter-gcp-grpc-ecosystem', 'gcp:request-response-spring-boot-starter-gcp-grpc-ecosystem-test' +include 'gcp:request-response-spring-boot-starter-gcp-grpc-spring', 'gcp:request-response-spring-boot-starter-gcp-grpc-spring-test' include 'gcp:correlation-id-trace-spring-boot-gcp-grpc' include 'gcp:micrometer-gcp' @@ -23,9 +23,9 @@ include 'gcp:logbook-spring-boot-autoconfigure-gcp' // Azure include 'azure:logback-logstash-encoder-azure', 'azure:spring-boot-autoconfigure-azure', 'azure:spring-boot-autoconfigure-azure-grpc-mdc' -include 'azure:spring-boot-starter-azure-web', 'azure:spring-boot-starter-azure-web-test', 'azure:spring-boot-starter-azure-grpc-ecosystem-test', 'azure:spring-boot-starter-azure-grpc-ecosystem' +include 'azure:spring-boot-starter-azure-web', 'azure:spring-boot-starter-azure-web-test', 'azure:spring-boot-starter-azure-grpc-spring-test', 'azure:spring-boot-starter-azure-grpc-spring' include 'azure:spring-boot-autoconfigure-azure-test', 'azure:request-response-spring-boot-starter-azure-web', 'azure:request-response-spring-boot-starter-azure-web-test' -include 'azure:request-response-spring-boot-starter-azure-grpc-ecosystem', 'azure:request-response-spring-boot-starter-azure-grpc-ecosystem-test' +include 'azure:request-response-spring-boot-starter-azure-grpc-spring', 'azure:request-response-spring-boot-starter-azure-grpc-spring-test' include 'azure:micrometer-azure' include 'azure:logbook-spring-boot-autoconfigure-azure' @@ -36,12 +36,12 @@ include 'trace:mdc-context-grpc-netty', 'trace:server:correlation-id-trace-sprin include 'request-response:netty-grpc', 'request-response:netty-grpc-test', 'request-response:request-response-spring-boot-autoconfigure-grpc' include 'request-response:logbook-filter', 'request-response:logbook', 'request-response:logbook-test', 'request-response:logbook-spring-boot-autoconfigure', 'request-response:logbook-spring-boot-autoconfigure-test' include 'on-demand:on-demand-spring-boot-starter-web', 'on-demand:on-demand-spring-boot-starter-grpc', 'on-demand:on-demand-spring-boot-autoconfigure' -include 'request-response:request-response-spring-boot-autoconfigure-web', 'request-response:request-response-spring-boot-autoconfigure-grpc-ecosystem' +include 'request-response:request-response-spring-boot-autoconfigure-web', 'request-response:request-response-spring-boot-autoconfigure-grpc-spring' include 'bom' // GCP include 'examples:gcp-web-example', 'examples:gcp-async-web-example', 'examples:gcp-web-without-test-artifacts-example', 'examples:gcp-web-without-test-or-ondemand-artifacts-example' -include 'examples:gcp-grpc-ecosystem-example', 'examples:gcp-web-apache-client-example' +include 'examples:gcp-grpc-spring-example', 'examples:gcp-web-apache-client-example' // Azure -include 'examples:azure-web-example', 'examples:azure-grpc-ecosystem-example', 'examples:gcp-grpc-ecosystem-without-test-artifacts-example' +include 'examples:azure-web-example', 'examples:azure-grpc-spring-example', 'examples:gcp-grpc-spring-without-test-artifacts-example' diff --git a/test/test-logback/build.gradle b/test/test-logback/build.gradle index 32728d42..fbfa4746 100644 --- a/test/test-logback/build.gradle +++ b/test/test-logback/build.gradle @@ -7,7 +7,7 @@ dependencies { api ("ch.qos.logback:logback-classic") api ("ch.qos.logback:logback-core") - api ("org.entur.jackson:jackson-syntax-highlight:${jacksonSyntaxHighlightVersion}") + api ("org.entur.jackson:jackson-tools-syntax-highlight:${jacksonSyntaxHighlightVersion}") api ("org.entur.logback-logstash-syntax-highlighting-decorators:logback-logstash-syntax-highlighting-decorators:${logbackLogstashSyntaxHighlightingDecoratorsVersion}") // junit diff --git a/test/test-logback/src/main/java/no/entur/logging/cloud/logback/test/HighlightingThrowableProxyConverter.java b/test/test-logback/src/main/java/no/entur/logging/cloud/logback/test/HighlightingThrowableProxyConverter.java new file mode 100644 index 00000000..3e992b4a --- /dev/null +++ b/test/test-logback/src/main/java/no/entur/logging/cloud/logback/test/HighlightingThrowableProxyConverter.java @@ -0,0 +1,195 @@ +/** + * Logback: the reliable, generic, fast and flexible logging framework. + * Copyright (C) 1999-2015, QOS.ch. All rights reserved. + * + * This program and the accompanying materials are dual-licensed under + * either the terms of the Eclipse Public License v1.0 as published by + * the Eclipse Foundation + * + * or (per the licensee's choosing) + * + * under the terms of the GNU Lesser General Public License version 2.1 + * as published by the Free Software Foundation. + */ +package no.entur.logging.cloud.logback.test; + +import ch.qos.logback.classic.pattern.ThrowableHandlingConverter; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.classic.spi.IThrowableProxy; +import ch.qos.logback.classic.spi.StackTraceElementProxy; +import ch.qos.logback.classic.spi.ThrowableProxyUtil; +import ch.qos.logback.core.CoreConstants; +import org.entur.jackson.tools.jsh.AnsiSyntaxHighlight; + +import java.util.List; +import java.util.function.Predicate; + +/** + * Add a stack trace in case the event contains a Throwable. + * + * Copy of {@link ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter} + extra whitespace + */ +public class HighlightingThrowableProxyConverter extends ThrowableHandlingConverter { + + protected static final int BUILDER_CAPACITY = 2048; + + int lengthOption = Integer.MAX_VALUE; + protected Predicate matcher; + + @SuppressWarnings("unchecked") + public void start() { + + List optionList = getOptionList(); + if (optionList != null && !optionList.isEmpty()) { + this.matcher = createMatcher(optionList); + } + + super.start(); + } + + private Predicate createMatcher(List optionList) { + if(optionList.size() == 1) { + String option = optionList.get(0); + return (s) -> s.getClassName().startsWith(option); + } + + return (s) -> { + for(String option : optionList) { + if(s.getClassName().startsWith(option)) { + return true; + } + } + + return false; + }; + + } + + protected void extraData(StringBuilder builder, StackTraceElementProxy step) { + // nop + } + + public String convert(ILoggingEvent event) { + IThrowableProxy tp = event.getThrowableProxy(); + if (tp == null) { + return CoreConstants.EMPTY_STRING; + } + + return throwableProxyToString(tp); + } + + protected String throwableProxyToString(IThrowableProxy tp) { + StringBuilder sb = new StringBuilder(BUILDER_CAPACITY); + sb.append(CoreConstants.LINE_SEPARATOR); + + recursiveAppend(sb, null, ThrowableProxyUtil.REGULAR_EXCEPTION_INDENT, tp); + + sb.append(CoreConstants.LINE_SEPARATOR); + return sb.toString(); + } + + private void recursiveAppend(StringBuilder sb, String prefix, int indent, IThrowableProxy tp) { + if (tp == null) + return; + subjoinFirstLine(sb, prefix, indent, tp); + sb.append(CoreConstants.LINE_SEPARATOR); + subjoinSTEPArray(sb, indent, tp); + IThrowableProxy[] suppressed = tp.getSuppressed(); + if (suppressed != null) { + for (IThrowableProxy current : suppressed) { + recursiveAppend(sb, CoreConstants.SUPPRESSED, indent + ThrowableProxyUtil.SUPPRESSED_EXCEPTION_INDENT, + current); + } + } + recursiveAppend(sb, CoreConstants.CAUSED_BY, indent, tp.getCause()); + } + + private void subjoinFirstLine(StringBuilder buf, String prefix, int indent, IThrowableProxy tp) { + ThrowableProxyUtil.indent(buf, indent - 1); + if (prefix != null) { + buf.append(prefix); + } + ThrowableProxyUtil.subjoinExceptionMessage(buf, tp); + } + + + protected void subjoinSTEPArray(StringBuilder buf, int indent, IThrowableProxy tp) { + StackTraceElementProxy[] stepArray = tp.getStackTraceElementProxyArray(); + int commonFrames = tp.getCommonFrames(); + + boolean unrestrictedPrinting = lengthOption > stepArray.length; + + int maxIndex = (unrestrictedPrinting) ? stepArray.length : lengthOption; + if (commonFrames > 0 && unrestrictedPrinting) { + maxIndex -= commonFrames; + } + + int ignoredCount = 0; + for (int i = 0; i < maxIndex; i++) { + StackTraceElementProxy element = stepArray[i]; + if (!isIgnoredStackTraceLine(element.toString())) { + + ThrowableProxyUtil.indent(buf, indent); + if(matcher != null) { + if(matcher.test(element.getStackTraceElement())) { + buf.append(AnsiSyntaxHighlight.ESC_START); + buf.append(AnsiSyntaxHighlight.HIGH_INTENSITY); + buf.append(AnsiSyntaxHighlight.ESC_END); + + printStackLine(buf, ignoredCount, element); + + buf.append(AnsiSyntaxHighlight.RESET); + } else { + printStackLine(buf, ignoredCount, element); + } + } else { + printStackLine(buf, ignoredCount, element); + } + + ignoredCount = 0; + buf.append(CoreConstants.LINE_SEPARATOR); + } else { + ++ignoredCount; + if (maxIndex < stepArray.length) { + ++maxIndex; + } + } + } + if (ignoredCount > 0) { + printIgnoredCount(buf, ignoredCount); + buf.append(CoreConstants.LINE_SEPARATOR); + } + + if (commonFrames > 0 && unrestrictedPrinting) { + ThrowableProxyUtil.indent(buf, indent); + buf.append("... ").append(tp.getCommonFrames()).append(" common frames omitted") + .append(CoreConstants.LINE_SEPARATOR); + } + } + + private void printStackLine(StringBuilder buf, int ignoredCount, StackTraceElementProxy element) { + buf.append(element); + extraData(buf, element); // allow other data to be added + if (ignoredCount > 0) { + printIgnoredCount(buf, ignoredCount); + } + } + + private void printIgnoredCount(StringBuilder buf, int ignoredCount) { + buf.append(" [").append(ignoredCount).append(" skipped]"); + } + + private boolean isIgnoredStackTraceLine(String line) { + /* + if (ignoredStackTraceLines != null) { + for (String ignoredStackTraceLine : ignoredStackTraceLines) { + if (line.contains(ignoredStackTraceLine)) { + return true; + } + } + } + */ + return false; + } + +} diff --git a/trace/mdc-context-grpc-netty/build.gradle b/trace/mdc-context-grpc-netty/build.gradle index 17ad6546..fbfbf8ad 100644 --- a/trace/mdc-context-grpc-netty/build.gradle +++ b/trace/mdc-context-grpc-netty/build.gradle @@ -9,7 +9,7 @@ dependencies { api("com.fasterxml.jackson.core:jackson-databind") api("com.fasterxml.jackson.core:jackson-annotations") - api("com.fasterxml.jackson.core:jackson-core") + api("tools.jackson.core:jackson-core") api("io.grpc:grpc-netty:${grpcNettyVersion}") api("io.grpc:grpc-services:${grpcNettyVersion}") diff --git a/trace/server/correlation-id-trace-grpc-netty/build.gradle b/trace/server/correlation-id-trace-grpc-netty/build.gradle index 1af67605..bd239389 100644 --- a/trace/server/correlation-id-trace-grpc-netty/build.gradle +++ b/trace/server/correlation-id-trace-grpc-netty/build.gradle @@ -10,7 +10,7 @@ dependencies { api("com.fasterxml.jackson.core:jackson-databind") api("com.fasterxml.jackson.core:jackson-annotations") - api("com.fasterxml.jackson.core:jackson-core") + api("tools.jackson.core:jackson-core") api("io.grpc:grpc-netty:${grpcNettyVersion}") api("io.grpc:grpc-services:${grpcNettyVersion}") diff --git a/trace/server/correlation-id-trace-spring-boot-grpc/src/main/java/no/entur/logging/cloud/trace/spring/grpc/properties/GrpcMdcProperties.java b/trace/server/correlation-id-trace-spring-boot-grpc/src/main/java/no/entur/logging/cloud/trace/spring/grpc/properties/GrpcMdcProperties.java index 2c00db01..0f2fbb8d 100644 --- a/trace/server/correlation-id-trace-spring-boot-grpc/src/main/java/no/entur/logging/cloud/trace/spring/grpc/properties/GrpcMdcProperties.java +++ b/trace/server/correlation-id-trace-spring-boot-grpc/src/main/java/no/entur/logging/cloud/trace/spring/grpc/properties/GrpcMdcProperties.java @@ -11,7 +11,7 @@ public class GrpcMdcProperties { private boolean response = true; - private int interceptorOrder; + private int interceptorOrder = 200; public int getInterceptorOrder() { return interceptorOrder;