Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions deployment/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@
<artifactId>quarkus-logging-json</artifactId>
<version>3.1.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jackson-deployment</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jsonb-deployment</artifactId>
</dependency>
<!-- test dependencies -->
<dependency>
<groupId>io.quarkus</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,9 @@

import org.jboss.jandex.ClassInfo;

import io.quarkiverse.loggingjson.JsonFactory;
import io.quarkiverse.loggingjson.JsonFactoryType;
import io.quarkiverse.loggingjson.LoggingJsonRecorder;
import io.quarkiverse.loggingjson.config.Config;
import io.quarkiverse.loggingjson.jackson.JacksonJsonFactory;
import io.quarkiverse.loggingjson.jsonb.JsonbJsonFactory;
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
import io.quarkus.deployment.Capabilities;
import io.quarkus.deployment.Capability;
Expand All @@ -34,24 +32,30 @@ FeatureBuildItem feature() {
@Record(ExecutionTime.RUNTIME_INIT)
LogConsoleFormatBuildItem setUpConsoleFormatter(Capabilities capabilities, LoggingJsonRecorder recorder,
Config config) {
return new LogConsoleFormatBuildItem(recorder.initializeConsoleJsonLogging(config, jsonFactory(capabilities)));
JsonFactoryType factoryType = determineJsonFactoryType(capabilities);

return new LogConsoleFormatBuildItem(
recorder.initializeConsoleJsonLogging(config, factoryType));
}

@BuildStep
@Record(ExecutionTime.RUNTIME_INIT)
LogFileFormatBuildItem setUpFileFormatter(Capabilities capabilities, LoggingJsonRecorder recorder,
Config config) {
return new LogFileFormatBuildItem(recorder.initializeFileJsonLogging(config, jsonFactory(capabilities)));
JsonFactoryType factoryType = determineJsonFactoryType(capabilities);

return new LogFileFormatBuildItem(
recorder.initializeFileJsonLogging(config, factoryType));
}

private JsonFactory jsonFactory(Capabilities capabilities) {
private JsonFactoryType determineJsonFactoryType(Capabilities capabilities) {
if (capabilities.isPresent(Capability.JACKSON)) {
return new JacksonJsonFactory();
return JsonFactoryType.JACKSON;
} else if (capabilities.isPresent(Capability.JSONB)) {
return new JsonbJsonFactory();
return JsonFactoryType.JSONB;
} else {
throw new RuntimeException(
"Missing json implementation to use for logging-json. Supported: [quarkus-jackson, quarkus-jsonb]");
"Missing JSON implementation to use for logging-json. Supported: [quarkus-jackson, quarkus-jsonb]");
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package io.quarkiverse.loggingjson;

public enum JsonFactoryType {
JACKSON,
JSONB
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@

import io.quarkiverse.loggingjson.config.Config;
import io.quarkiverse.loggingjson.config.ConfigFormatter;
import io.quarkiverse.loggingjson.jackson.JacksonJsonFactory;
import io.quarkiverse.loggingjson.jsonb.JsonbJsonFactory;
import io.quarkiverse.loggingjson.providers.*;
import io.quarkus.arc.Arc;
import io.quarkus.arc.InjectableInstance;
Expand All @@ -21,19 +23,21 @@
public class LoggingJsonRecorder {
private static final Logger log = LoggerFactory.getLogger(LoggingJsonRecorder.class);

public RuntimeValue<Optional<Formatter>> initializeConsoleJsonLogging(Config config,
JsonFactory jsonFactory) {
public RuntimeValue<Optional<Formatter>> initializeConsoleJsonLogging(Config config, JsonFactoryType factoryType) {
JsonFactory jsonFactory = createJsonFactory(factoryType, config);

return initializeJsonLogging(config.console, config, jsonFactory);
}

public RuntimeValue<Optional<Formatter>> initializeFileJsonLogging(Config config,
JsonFactory jsonFactory) {
public RuntimeValue<Optional<Formatter>> initializeFileJsonLogging(Config config, JsonFactoryType factoryType) {
JsonFactory jsonFactory = createJsonFactory(factoryType, config);

return initializeJsonLogging(config.file, config, jsonFactory);
}

public RuntimeValue<Optional<Formatter>> initializeJsonLogging(ConfigFormatter formatter, Config config,
JsonFactory jsonFactory) {
if (formatter == null || !formatter.isEnabled()) {
if (formatter == null || !formatter.isEnabled() || jsonFactory == null) {
return new RuntimeValue<>(Optional.empty());
}

Expand Down Expand Up @@ -66,6 +70,18 @@ public RuntimeValue<Optional<Formatter>> initializeJsonLogging(ConfigFormatter f

}

private JsonFactory createJsonFactory(JsonFactoryType type, Config config) {
switch (type) {
case JACKSON:
return new JacksonJsonFactory(config.enabledJavaTimeModule.orElse(false));
case JSONB:
return new JsonbJsonFactory();
default:
log.error("Unsupported JsonFactory type");
return null;
}
}

private List<JsonProvider> defaultFormat(Config config) {
List<JsonProvider> providers = new ArrayList<>();
providers.add(new TimestampJsonProvider(config.fields.timestamp));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,13 @@ public class Config {
*/
@ConfigItem
public boolean prettyPrint;

/**
* Enable the JavaTimeModule for Jackson.
*/
@ConfigItem
public Optional<Boolean> enabledJavaTimeModule;

/**
* The special end-of-record delimiter to be used. By default, newline delimiter is used.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

import io.quarkiverse.loggingjson.JsonFactory;
import io.quarkiverse.loggingjson.JsonGenerator;
Expand All @@ -14,7 +15,11 @@ public class JacksonJsonFactory implements JsonFactory {

private final com.fasterxml.jackson.core.JsonFactory jsonFactory;

public JacksonJsonFactory() {
public final boolean enabledJavaTimeModule;

public JacksonJsonFactory(boolean enabledJavaTimeModule) {
this.enabledJavaTimeModule = enabledJavaTimeModule;

jsonFactory = createJsonFactory();
}

Expand All @@ -25,6 +30,10 @@ private com.fasterxml.jackson.core.JsonFactory createJsonFactory() {
*/
.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);

if (enabledJavaTimeModule) {
objectMapper.registerModule(new JavaTimeModule());
}

try {
objectMapper.findAndRegisterModules();
} catch (ServiceConfigurationError serviceConfigurationError) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
abstract class JsonProviderBaseTest {

private static final JsonFactory jsonb = new JsonbJsonFactory();
private static final JsonFactory jackson = new JacksonJsonFactory();
private static final JsonFactory jackson = new JacksonJsonFactory(false);
private static final ObjectMapper mapper = new ObjectMapper();

protected abstract Type type();
Expand Down