diff --git a/ecs-logging-core/src/main/java/co/elastic/logging/JsonUtils.java b/ecs-logging-core/src/main/java/co/elastic/logging/JsonUtils.java index 943a952a..d2d696c6 100644 --- a/ecs-logging-core/src/main/java/co/elastic/logging/JsonUtils.java +++ b/ecs-logging-core/src/main/java/co/elastic/logging/JsonUtils.java @@ -58,6 +58,10 @@ public final class JsonUtils { } public static void quoteAsString(CharSequence content, StringBuilder sb) { + if (content == null) { + sb.append("null"); + return; + } final int[] escCodes = sOutputEscapes128; final int escLen = escCodes.length; for (int i = 0, len = content.length(); i < len; ++i) { diff --git a/ecs-logging-core/src/test/java/co/elastic/logging/EcsJsonSerializerTest.java b/ecs-logging-core/src/test/java/co/elastic/logging/EcsJsonSerializerTest.java index 68ed3fdd..4ae7ab72 100644 --- a/ecs-logging-core/src/test/java/co/elastic/logging/EcsJsonSerializerTest.java +++ b/ecs-logging-core/src/test/java/co/elastic/logging/EcsJsonSerializerTest.java @@ -24,6 +24,7 @@ */ package co.elastic.logging; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; @@ -54,6 +55,13 @@ void serializeExceptionAsString() throws IOException { assertThat(jsonNode.get("error.stack_trace").textValue()).isEqualTo(stringWriter.toString()); } + @Test + void serializeNullDoesNotThrowAnException() throws JsonProcessingException { + StringBuilder stringBuilder = new StringBuilder(); + EcsJsonSerializer.serializeFormattedMessage(stringBuilder, null); + assertThat(stringBuilder.toString()).isEqualTo("\"message\":\"null\", "); + } + @Test void serializeExceptionAsArray() throws IOException { Exception exception = new Exception("foo");