Skip to content
Closed
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
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,10 @@ public RuntimeValue<Optional<Formatter>> initializeJsonLogging(Config config, bo
JsonFactory jsonFactory;
if (useJackson) {
log.debug("Using Jackson as the json implementation");
jsonFactory = new JacksonJsonFactory();
jsonFactory = new JacksonJsonFactory(config.prettyPrint);
} else {
log.debug("Using Jsonb as the json implementation");
jsonFactory = new JsonbJsonFactory();
jsonFactory = new JsonbJsonFactory(config.prettyPrint);
}

return new RuntimeValue<>(Optional.of(new JsonFormatter(providers, jsonFactory, config)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,16 @@

public class JacksonJsonFactory implements JsonFactory {

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

public JacksonJsonFactory() {
jsonFactory = createJsonFactory();
this(false);
}

public JacksonJsonFactory(boolean prettyPrint) {
this.prettyPrint = prettyPrint;
this.jsonFactory = createJsonFactory();
}

private com.fasterxml.jackson.core.JsonFactory createJsonFactory() {
Expand Down Expand Up @@ -54,6 +60,10 @@ private com.fasterxml.jackson.core.JsonFactory createJsonFactory() {

@Override
public JsonGenerator createGenerator(StringBuilderWriter writer) throws IOException {
return new JacksonJsonGenerator(jsonFactory.createGenerator(writer));
com.fasterxml.jackson.core.JsonGenerator generator = jsonFactory.createGenerator(writer);
if (prettyPrint) {
generator.useDefaultPrettyPrinter();
}
return new JacksonJsonGenerator(generator);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.quarkiverse.loggingjson.jsonb;

import java.util.HashMap;
import java.util.Map;

import javax.json.Json;
import javax.json.stream.JsonGeneratorFactory;
Expand All @@ -18,7 +19,16 @@ public class JsonbJsonFactory implements JsonFactory {
private final YassonJsonb jsonb;

public JsonbJsonFactory() {
factory = Json.createGeneratorFactory(new HashMap<>());
this(false);
}

public JsonbJsonFactory(boolean prettyPrint) {
Map<String, Object> config = new HashMap<>();
if (prettyPrint) {
// It doesn't matter what value this key has, as long as it's present
config.put(javax.json.stream.JsonGenerator.PRETTY_PRINTING, Boolean.TRUE);
}
factory = Json.createGeneratorFactory(config);
jsonb = (YassonJsonb) new JsonBindingBuilder().build();
}

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

import java.io.IOException;

import org.jboss.logmanager.ExtLogRecord;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import io.quarkiverse.loggingjson.JsonFactory;
import io.quarkiverse.loggingjson.JsonGenerator;
import io.quarkiverse.loggingjson.JsonProvider;
import io.quarkiverse.loggingjson.StringBuilderWriter;

abstract class JsonBaseTest {

private static final ObjectMapper mapper = new ObjectMapper();

protected abstract Type type();

protected abstract JsonFactory getJsonFactory();

protected JsonGenerator getGenerator(StringBuilderWriter writer) throws IOException {
return getJsonFactory().createGenerator(writer);
}

protected String getResult(JsonProvider jsonProvider, ExtLogRecord event) throws IOException {
try (StringBuilderWriter writer = new StringBuilderWriter();
JsonGenerator generator = getGenerator(writer)) {
generator.writeStartObject();
jsonProvider.writeTo(generator, event);
generator.writeEndObject();
generator.flush();
return writer.toString();
}
}

protected JsonNode getResultAsJsonNode(JsonProvider jsonProvider, ExtLogRecord event) throws IOException {
return mapper.readValue(getResult(jsonProvider, event), JsonNode.class);
}

public enum Type {
JSONB,
JACKSON
}
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,16 @@
package io.quarkiverse.loggingjson.providers;

import java.io.IOException;

import org.jboss.logmanager.ExtLogRecord;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import io.quarkiverse.loggingjson.JsonFactory;
import io.quarkiverse.loggingjson.JsonGenerator;
import io.quarkiverse.loggingjson.JsonProvider;
import io.quarkiverse.loggingjson.StringBuilderWriter;
import io.quarkiverse.loggingjson.jackson.JacksonJsonFactory;
import io.quarkiverse.loggingjson.jsonb.JsonbJsonFactory;

abstract class JsonProviderBaseTest {
abstract class JsonProviderBaseTest extends JsonBaseTest {

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

protected abstract Type type();

private JsonFactory getJsonFactory() {
@Override
protected JsonFactory getJsonFactory() {
switch (type()) {
case JSONB:
return jsonb;
Expand All @@ -33,27 +21,4 @@ private JsonFactory getJsonFactory() {
}
}

protected JsonGenerator getGenerator(StringBuilderWriter writer) throws IOException {
return getJsonFactory().createGenerator(writer);
}

protected String getResult(JsonProvider jsonProvider, ExtLogRecord event) throws IOException {
try (StringBuilderWriter writer = new StringBuilderWriter();
JsonGenerator generator = getGenerator(writer)) {
generator.writeStartObject();
jsonProvider.writeTo(generator, event);
generator.writeEndObject();
generator.flush();
return writer.toString();
}
}

protected JsonNode getResultAsJsonNode(JsonProvider jsonProvider, ExtLogRecord event) throws IOException {
return mapper.readValue(getResult(jsonProvider, event), JsonNode.class);
}

public enum Type {
JSONB,
JACKSON
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.quarkiverse.loggingjson.providers;

import io.quarkiverse.loggingjson.JsonFactory;
import io.quarkiverse.loggingjson.jackson.JacksonJsonFactory;
import io.quarkiverse.loggingjson.jsonb.JsonbJsonFactory;

abstract class PrettyPrintingJsonProviderBaseTest extends JsonBaseTest {

private final JsonFactory jsonb = new JsonbJsonFactory(true);
private final JsonFactory jackson = new JacksonJsonFactory(true);

@Override
protected JsonFactory getJsonFactory() {
switch (type()) {
case JSONB:
return jsonb;
case JACKSON:
return jackson;
default:
throw new RuntimeException("Unsupported type");
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
package io.quarkiverse.loggingjson.providers;

import static io.quarkiverse.loggingjson.providers.KeyValueStructuredArgument.kv;
import static org.junit.jupiter.api.Assertions.assertEquals;

import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;

import org.junit.jupiter.api.Test;

import io.quarkiverse.loggingjson.JsonGenerator;
import io.quarkiverse.loggingjson.StringBuilderWriter;

public class PrettyPrintingKeyValueStructuredArgumentJsonbTest extends PrettyPrintingJsonProviderBaseTest {
@Override
protected Type type() {
return Type.JSONB;
}

@Test
void testKeyValues() throws IOException {
assertEquals("\n"
+ "{\n"
+ " \"key\": null\n"
+ "}",
run("key", null));
assertEquals("\n"
+ "{\n"
+ " \"anotherKey\": null\n"
+ "}",
run("anotherKey", null));
assertEquals("\n"
+ "{\n"
+ " \"key\": 324\n"
+ "}",
run("key", (short) 324));
assertEquals("\n"
+ "{\n"
+ " \"key\": 324\n"
+ "}",
run("key", 324));
assertEquals("\n"
+ "{\n"
+ " \"key\": 324\n"
+ "}",
run("key", 324L));
assertEquals("\n"
+ "{\n"
+ " \"key\": 324.348\n"
+ "}",
run("key", 324.348));
assertEquals("\n"
+ "{\n"
+ " \"key\": 324.348\n"
+ "}",
run("key", 324.348d));
assertEquals("\n"
+ "{\n"
+ " \"key\": 324\n"
+ "}",
run("key", BigInteger.valueOf(324)));
assertEquals("\n"
+ "{\n"
+ " \"key\": 324.348\n"
+ "}",
run("key", BigDecimal.valueOf(324.348d)));
assertEquals("\n"
+ "{\n"
+ " \"key\": \"value\"\n"
+ "}",
run("key", "value"));
assertEquals("\n"
+ "{\n"
+ " \"key\": [\n"
+ " \"value\",\n"
+ " \"value2\"\n"
+ " ]\n"
+ "}",
run("key", new String[] { "value", "value2" }));
assertEquals("\n"
+ "{\n"
+ " \"key\": [\n"
+ " \"value\",\n"
+ " \"value2\"\n"
+ " ]\n"
+ "}",
run("key", Arrays.asList("value", "value2")));
assertEquals("\n"
+ "{\n"
+ " \"key\": {\n"
+ " }\n"
+ "}",
run("key", new Object()));
assertEquals("\n"
+ "{\n"
+ " \"key\": {\n"
+ " \"field1\": \"field1\",\n"
+ " \"field2\": 2389472389\n"
+ " }\n"
+ "}",
run("key", new TestPojo()));
}

protected String run(String key, Object value) throws IOException {
StringBuilderWriter w = new StringBuilderWriter();
try (JsonGenerator generator = getGenerator(w)) {
generator.writeStartObject();

kv(key, value).writeTo(generator);
generator.writeEndObject();
generator.flush();
}
return w.toString();
}

public static class TestPojo {
private final String field1 = "field1";
private final Long field2 = 2389472389L;

public String getField1() {
return field1;
}

public Long getField2() {
return field2;
}
}
}
Loading