Class JsonLayout

All Implemented Interfaces:
LocationAware, Layout<String>, Encoder<LogEvent>, StringLayout

@Plugin(name="JsonLayout", category="Core", elementType="layout", printObject=true) public final class JsonLayout extends AbstractStringLayout
Note: The JsonLayout should be considered to be deprecated. Please use JsonTemplateLayout instead. Appends a series of JSON events as strings serialized as bytes.

Complete well-formed JSON vs. fragment JSON

If you configure complete="true", the appender outputs a well-formed JSON document. By default, with complete="false", you should include the output as an external file in a separate file to form a well-formed JSON document.

If complete="false", the appender does not write the JSON open array character "[" at the start of the document, "]" and the end, nor comma "," between records.


Appenders using this layout should have their charset set to UTF-8 or UTF-16, otherwise events containing non ASCII characters could result in corrupted log files.

Pretty vs. compact JSON

By default, the JSON layout is not compact (a.k.a. "pretty") with compact="false", which means the appender uses end-of-line characters and indents lines to format the text. If compact="true", then no end-of-line or indentation is used. Message content may contain, of course, escaped end-of-lines.

Additional Fields

This property allows addition of custom fields into generated JSON. <JsonLayout><KeyValuePair key="foo" value="bar"/></JsonLayout> inserts "foo":"bar" directly into JSON output. Supports Lookup expressions.

  • Field Details


      protected static final String DEFAULT_EOL
      See Also:

      protected static final String COMPACT_EOL
      See Also:
    • eol

      protected final String eol
    • objectWriter

      protected final com.fasterxml.jackson.databind.ObjectWriter objectWriter
    • compact

      protected final boolean compact
    • complete

      protected final boolean complete
    • includeNullDelimiter

      protected final boolean includeNullDelimiter
    • additionalFields

      protected final org.apache.logging.log4j.core.layout.AbstractJacksonLayout.ResolvableKeyValuePair[] additionalFields
  • Constructor Details

    • JsonLayout

      @Deprecated protected JsonLayout(Configuration config, boolean locationInfo, boolean properties, boolean encodeThreadContextAsList, boolean complete, boolean compact, boolean eventEol, String endOfLine, String headerPattern, String footerPattern, Charset charset, boolean includeStacktrace)
      Use newBuilder() instead
  • Method Details

    • getHeader

      public byte[] getHeader()
      Returns appropriate JSON header.
      Specified by:
      getHeader in interface Layout<String>
      getHeader in class AbstractStringLayout
      a byte array containing the header, opening the JSON array.
    • getFooter

      public byte[] getFooter()
      Returns appropriate JSON footer.
      Specified by:
      getFooter in interface Layout<String>
      getFooter in class AbstractStringLayout
      a byte array containing the footer, closing the JSON array.
    • getContentFormat

      public Map<String,String> getContentFormat()
      Description copied from interface: Layout
      Returns a description of the content format.
      Specified by:
      getContentFormat in interface Layout<String>
      getContentFormat in class AbstractLayout<String>
      a Map of key/value pairs describing the Layout-specific content format, or an empty Map if no content format descriptors are specified.
    • getContentType

      public String getContentType()
      Description copied from interface: Layout
      Returns the content type output by this layout. The base class returns "text/plain".
      Specified by:
      getContentType in interface Layout<String>
      getContentType in class AbstractStringLayout
      The content type.
    • createLayout

      @Deprecated public static JsonLayout createLayout(Configuration config, boolean locationInfo, boolean properties, boolean propertiesAsList, boolean complete, boolean compact, boolean eventEol, String headerPattern, String footerPattern, Charset charset, boolean includeStacktrace)
      Use newBuilder() instead
      Creates a JSON Layout.
      config - The plugin configuration.
      locationInfo - If "true", includes the location information in the generated JSON.
      properties - If "true", includes the thread context map in the generated JSON.
      propertiesAsList - If true, the thread context map is included as a list of map entry objects, where each entry has a "key" attribute (whose value is the key) and a "value" attribute (whose value is the value). Defaults to false, in which case the thread context map is included as a simple map of key-value pairs.
      complete - If "true", includes the JSON header and footer, and comma between records.
      compact - If "true", does not use end-of-lines and indentation, defaults to "false".
      eventEol - If "true", forces an EOL after each log event (even if compact is "true"), defaults to "false". This allows one even per line, even in compact mode.
      headerPattern - The header pattern, defaults to "[" if null.
      footerPattern - The footer pattern, defaults to "]" if null.
      charset - The character set to use, if null, uses "UTF-8".
      includeStacktrace - If "true", includes the stacktrace of any Throwable in the generated JSON, defaults to "true".
      A JSON Layout.
    • newBuilder

      @PluginBuilderFactory public static <B extends JsonLayout.Builder<B>> B newBuilder()
    • createDefaultLayout

      public static JsonLayout createDefaultLayout()
      Creates a JSON Layout using the default settings. Useful for testing.
      A JSON Layout.
    • toSerializable

      public void toSerializable(LogEvent event, Writer writer) throws IOException
    • valueNeedsLookup

      protected static boolean valueNeedsLookup(String value)
    • toSerializable

      public String toSerializable(LogEvent event)
      Formats a LogEvent.
      event - The LogEvent.
      The XML representation of the LogEvent.
    • wrapLogEvent

      protected Object wrapLogEvent(LogEvent event)