Add trailing newlines and emit formatted JSON (#216)

diff --git a/log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v2/AbstractJacksonConfigurationMapper.java b/log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v2/AbstractJacksonConfigurationMapper.java
index dd4b488..a75d7a4 100644
--- a/log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v2/AbstractJacksonConfigurationMapper.java
+++ b/log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v2/AbstractJacksonConfigurationMapper.java
@@ -73,6 +73,8 @@
                 ? nodeFactory.objectNode().set(configuration.getPluginName(), configurationNode)
                 : configurationNode;
         mapper.writeValue(outputStream, documentNode);
+        outputStream.write('\n');
+        outputStream.close();
     }
 
     private static ConfigurationNode parseObjectNode(ObjectNode objectNode, String fieldName) {
diff --git a/log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v2/JsonConfigurationMapper.java b/log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v2/JsonConfigurationMapper.java
index 8eed7c0..2f03437 100644
--- a/log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v2/JsonConfigurationMapper.java
+++ b/log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v2/JsonConfigurationMapper.java
@@ -18,6 +18,8 @@
 
 import aQute.bnd.annotation.Resolution;
 import aQute.bnd.annotation.spi.ServiceProvider;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.databind.json.JsonMapper;
 import org.apache.logging.converter.config.spi.ConfigurationMapper;
 
@@ -27,7 +29,12 @@
     private static final String LOG4J_V2_JSON_FORMAT = "v2:json";
 
     public JsonConfigurationMapper() {
-        super(JsonMapper.builder().build(), true);
+        super(
+                JsonMapper.builder()
+                        .enable(SerializationFeature.INDENT_OUTPUT)
+                        .disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET)
+                        .build(),
+                true);
     }
 
     @Override
diff --git a/log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v2/XmlConfigurationMapper.java b/log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v2/XmlConfigurationMapper.java
index 077c944..f17a7bf 100644
--- a/log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v2/XmlConfigurationMapper.java
+++ b/log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v2/XmlConfigurationMapper.java
@@ -88,6 +88,7 @@
             streamWriter.writeEndElement();
             streamWriter.writeEndDocument();
             streamWriter.flush();
+            streamWriter.writeCharacters("\n");
         } catch (XMLStreamException e) {
             throw new IOException("Unable to write configuration.", e);
         } finally {
diff --git a/log4j-converter-config/src/test/java/org/apache/logging/converter/config/ConfigurationConverterTest.java b/log4j-converter-config/src/test/java/org/apache/logging/converter/config/ConfigurationConverterTest.java
index eadf189..b0bdca8 100644
--- a/log4j-converter-config/src/test/java/org/apache/logging/converter/config/ConfigurationConverterTest.java
+++ b/log4j-converter-config/src/test/java/org/apache/logging/converter/config/ConfigurationConverterTest.java
@@ -59,8 +59,10 @@
             ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
             converter.convert(Objects.requireNonNull(inputStream), inputFormat, outputStream, DEFAULT_FORMAT);
             // Parse the result and check if it matches
-            ConfigurationNode actual = parser.parse(new ByteArrayInputStream(outputStream.toByteArray()));
+            byte[] outputBytes = outputStream.toByteArray();
+            ConfigurationNode actual = parser.parse(new ByteArrayInputStream(outputBytes));
             assertThat(actual).ignoringOrder().isEqualTo(EXAMPLE_V2_CONFIGURATION);
+            assertThat(new String(outputBytes)).endsWith("\n");
         }
     }