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+++`
-
|===