diff --git a/deployment/pom.xml b/deployment/pom.xml index 09a0faf..53ff2b5 100644 --- a/deployment/pom.xml +++ b/deployment/pom.xml @@ -25,6 +25,11 @@ quarkus-logging-json 3.4.1-SNAPSHOT + + io.quarkus + quarkus-jackson-spi + true + io.quarkus diff --git a/deployment/src/main/java/io/quarkiverse/loggingjson/deployment/LoggingJsonProcessor.java b/deployment/src/main/java/io/quarkiverse/loggingjson/deployment/LoggingJsonProcessor.java index 4d3e0fb..0d59c5f 100644 --- a/deployment/src/main/java/io/quarkiverse/loggingjson/deployment/LoggingJsonProcessor.java +++ b/deployment/src/main/java/io/quarkiverse/loggingjson/deployment/LoggingJsonProcessor.java @@ -1,14 +1,18 @@ package io.quarkiverse.loggingjson.deployment; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; import org.jboss.jandex.ClassInfo; import io.quarkiverse.loggingjson.JsonFactory; import io.quarkiverse.loggingjson.LoggingJsonRecorder; +import io.quarkiverse.loggingjson.deployment.config.ConfigJackson; import io.quarkiverse.loggingjson.jackson.JacksonJsonFactory; import io.quarkiverse.loggingjson.jsonb.JsonbJsonFactory; import io.quarkus.arc.deployment.AdditionalBeanBuildItem; +import io.quarkus.bootstrap.classloading.QuarkusClassLoader; import io.quarkus.deployment.Capabilities; import io.quarkus.deployment.Capability; import io.quarkus.deployment.annotations.BuildProducer; @@ -20,6 +24,7 @@ import io.quarkus.deployment.builditem.LogConsoleFormatBuildItem; import io.quarkus.deployment.builditem.LogFileFormatBuildItem; import io.quarkus.deployment.builditem.LogSocketFormatBuildItem; +import io.quarkus.jackson.spi.ClassPathJacksonModuleBuildItem; class LoggingJsonProcessor { @@ -48,6 +53,18 @@ LogSocketFormatBuildItem setUpSocketFormatter(Capabilities capabilities, Logging return new LogSocketFormatBuildItem(recorder.initializeSocketJsonLogging(jsonFactory(capabilities))); } + @BuildStep + void autoRegisterModules(BuildProducer classPathJacksonModules, + ConfigJackson configJackson) { + List moduleNames = new ArrayList<>(configJackson.baseModules()); + configJackson.additionalModules().ifPresent(moduleNames::addAll); + for (String moduleClassName : moduleNames) { + if (QuarkusClassLoader.isClassPresentAtRuntime(moduleClassName)) { + classPathJacksonModules.produce(new ClassPathJacksonModuleBuildItem(moduleClassName)); + } + } + } + private JsonFactory jsonFactory(Capabilities capabilities) { if (capabilities.isPresent(Capability.JACKSON)) { return new JacksonJsonFactory(); diff --git a/deployment/src/main/java/io/quarkiverse/loggingjson/deployment/config/ConfigJackson.java b/deployment/src/main/java/io/quarkiverse/loggingjson/deployment/config/ConfigJackson.java new file mode 100644 index 0000000..0208554 --- /dev/null +++ b/deployment/src/main/java/io/quarkiverse/loggingjson/deployment/config/ConfigJackson.java @@ -0,0 +1,33 @@ +package io.quarkiverse.loggingjson.deployment.config; + +import java.util.List; +import java.util.Optional; + +import io.quarkus.runtime.annotations.ConfigPhase; +import io.quarkus.runtime.annotations.ConfigRoot; +import io.smallrye.config.ConfigMapping; +import io.smallrye.config.WithDefault; +import io.smallrye.config.WithName; + +@ConfigRoot(phase = ConfigPhase.BUILD_TIME) +@ConfigMapping(prefix = "quarkus.log.json.jackson.object.mapper") +public interface ConfigJackson { + + /** + * List of default jackson modules to register always. + * + * @return module names list + */ + @WithName("base-modules") + @WithDefault("com.fasterxml.jackson.datatype.jsr310.JavaTimeModule,com.fasterxml.jackson.datatype.jdk8.Jdk8Module,com.fasterxml.jackson.module.paramnames.ParameterNamesModule") + List baseModules(); + + /** + * List of additional jackson modules to register. + * + * @return module names list + */ + @WithName("additional-modules") + Optional> additionalModules(); + +} diff --git a/docs/modules/ROOT/pages/includes/quarkus-logging-json.adoc b/docs/modules/ROOT/pages/includes/quarkus-logging-json.adoc index 1c3494e..505a541 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-logging-json.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-logging-json.adoc @@ -7,6 +7,48 @@ h|[.header-title]##Configuration property## h|Type h|Default +a|icon:lock[title=Fixed at build time] [[quarkus-logging-json_quarkus-log-json-jackson-object-mapper-base-modules]] [.property-path]##link:#quarkus-logging-json_quarkus-log-json-jackson-object-mapper-base-modules[`quarkus.log.json.jackson.object.mapper.base-modules`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.log.json.jackson.object.mapper.base-modules+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +List of default jackson modules to register always. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_LOG_JSON_JACKSON_OBJECT_MAPPER_BASE_MODULES+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_LOG_JSON_JACKSON_OBJECT_MAPPER_BASE_MODULES+++` +endif::add-copy-button-to-env-var[] +-- +|list of string +|`+++com.fasterxml.jackson.datatype.jsr310.JavaTimeModule+++`, `+++com.fasterxml.jackson.datatype.jdk8.Jdk8Module+++`, `+++com.fasterxml.jackson.module.paramnames.ParameterNamesModule+++` + +a|icon:lock[title=Fixed at build time] [[quarkus-logging-json_quarkus-log-json-jackson-object-mapper-additional-modules]] [.property-path]##link:#quarkus-logging-json_quarkus-log-json-jackson-object-mapper-additional-modules[`quarkus.log.json.jackson.object.mapper.additional-modules`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.log.json.jackson.object.mapper.additional-modules+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +List of additional jackson modules to register. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_LOG_JSON_JACKSON_OBJECT_MAPPER_ADDITIONAL_MODULES+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_LOG_JSON_JACKSON_OBJECT_MAPPER_ADDITIONAL_MODULES+++` +endif::add-copy-button-to-env-var[] +-- +|list of string +| + a| [[quarkus-logging-json_quarkus-log-json-console-enabled]] [.property-path]##link:#quarkus-logging-json_quarkus-log-json-console-enabled[`quarkus.log.json.console.enabled`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.log.json.console.enabled+++[] @@ -932,6 +974,27 @@ endif::add-copy-button-to-env-var[] |`+++ +++` +a| [[quarkus-logging-json_quarkus-log-json-log-format]] [.property-path]##link:#quarkus-logging-json_quarkus-log-json-log-format[`quarkus.log.json.log-format`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.log.json.log-format+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Support changing logging format. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_LOG_JSON_LOG_FORMAT+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_LOG_JSON_LOG_FORMAT+++` +endif::add-copy-button-to-env-var[] +-- +a|`default`, `ecs` +|`+++default+++` + h|[[quarkus-logging-json_section_quarkus-log-json-additional-field]] [.section-name.section-level0]##link:#quarkus-logging-json_section_quarkus-log-json-additional-field[For adding fields to the json output directly from the config]## h|Type h|Default @@ -979,26 +1042,5 @@ a|`string`, `int`, `long`, `float`, `double` |`+++string+++` -a| [[quarkus-logging-json_quarkus-log-json-log-format]] [.property-path]##link:#quarkus-logging-json_quarkus-log-json-log-format[`quarkus.log.json.log-format`]## -ifdef::add-copy-button-to-config-props[] -config_property_copy_button:+++quarkus.log.json.log-format+++[] -endif::add-copy-button-to-config-props[] - - -[.description] --- -Support changing logging format. - - -ifdef::add-copy-button-to-env-var[] -Environment variable: env_var_with_copy_button:+++QUARKUS_LOG_JSON_LOG_FORMAT+++[] -endif::add-copy-button-to-env-var[] -ifndef::add-copy-button-to-env-var[] -Environment variable: `+++QUARKUS_LOG_JSON_LOG_FORMAT+++` -endif::add-copy-button-to-env-var[] --- -a|`default`, `ecs` -|`+++default+++` - |=== diff --git a/docs/modules/ROOT/pages/includes/quarkus-logging-json_quarkus.log.adoc b/docs/modules/ROOT/pages/includes/quarkus-logging-json_quarkus.log.adoc index 1c3494e..505a541 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-logging-json_quarkus.log.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-logging-json_quarkus.log.adoc @@ -7,6 +7,48 @@ h|[.header-title]##Configuration property## h|Type h|Default +a|icon:lock[title=Fixed at build time] [[quarkus-logging-json_quarkus-log-json-jackson-object-mapper-base-modules]] [.property-path]##link:#quarkus-logging-json_quarkus-log-json-jackson-object-mapper-base-modules[`quarkus.log.json.jackson.object.mapper.base-modules`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.log.json.jackson.object.mapper.base-modules+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +List of default jackson modules to register always. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_LOG_JSON_JACKSON_OBJECT_MAPPER_BASE_MODULES+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_LOG_JSON_JACKSON_OBJECT_MAPPER_BASE_MODULES+++` +endif::add-copy-button-to-env-var[] +-- +|list of string +|`+++com.fasterxml.jackson.datatype.jsr310.JavaTimeModule+++`, `+++com.fasterxml.jackson.datatype.jdk8.Jdk8Module+++`, `+++com.fasterxml.jackson.module.paramnames.ParameterNamesModule+++` + +a|icon:lock[title=Fixed at build time] [[quarkus-logging-json_quarkus-log-json-jackson-object-mapper-additional-modules]] [.property-path]##link:#quarkus-logging-json_quarkus-log-json-jackson-object-mapper-additional-modules[`quarkus.log.json.jackson.object.mapper.additional-modules`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.log.json.jackson.object.mapper.additional-modules+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +List of additional jackson modules to register. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_LOG_JSON_JACKSON_OBJECT_MAPPER_ADDITIONAL_MODULES+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_LOG_JSON_JACKSON_OBJECT_MAPPER_ADDITIONAL_MODULES+++` +endif::add-copy-button-to-env-var[] +-- +|list of string +| + a| [[quarkus-logging-json_quarkus-log-json-console-enabled]] [.property-path]##link:#quarkus-logging-json_quarkus-log-json-console-enabled[`quarkus.log.json.console.enabled`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.log.json.console.enabled+++[] @@ -932,6 +974,27 @@ endif::add-copy-button-to-env-var[] |`+++ +++` +a| [[quarkus-logging-json_quarkus-log-json-log-format]] [.property-path]##link:#quarkus-logging-json_quarkus-log-json-log-format[`quarkus.log.json.log-format`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.log.json.log-format+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Support changing logging format. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_LOG_JSON_LOG_FORMAT+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_LOG_JSON_LOG_FORMAT+++` +endif::add-copy-button-to-env-var[] +-- +a|`default`, `ecs` +|`+++default+++` + h|[[quarkus-logging-json_section_quarkus-log-json-additional-field]] [.section-name.section-level0]##link:#quarkus-logging-json_section_quarkus-log-json-additional-field[For adding fields to the json output directly from the config]## h|Type h|Default @@ -979,26 +1042,5 @@ a|`string`, `int`, `long`, `float`, `double` |`+++string+++` -a| [[quarkus-logging-json_quarkus-log-json-log-format]] [.property-path]##link:#quarkus-logging-json_quarkus-log-json-log-format[`quarkus.log.json.log-format`]## -ifdef::add-copy-button-to-config-props[] -config_property_copy_button:+++quarkus.log.json.log-format+++[] -endif::add-copy-button-to-config-props[] - - -[.description] --- -Support changing logging format. - - -ifdef::add-copy-button-to-env-var[] -Environment variable: env_var_with_copy_button:+++QUARKUS_LOG_JSON_LOG_FORMAT+++[] -endif::add-copy-button-to-env-var[] -ifndef::add-copy-button-to-env-var[] -Environment variable: `+++QUARKUS_LOG_JSON_LOG_FORMAT+++` -endif::add-copy-button-to-env-var[] --- -a|`default`, `ecs` -|`+++default+++` - |===