Class ESJsonLayout

java.lang.Object
org.apache.logging.log4j.core.layout.AbstractLayout<String>
org.apache.logging.log4j.core.layout.AbstractStringLayout
org.elasticsearch.common.logging.ESJsonLayout
All Implemented Interfaces:
org.apache.logging.log4j.core.Layout<String>, org.apache.logging.log4j.core.layout.Encoder<org.apache.logging.log4j.core.LogEvent>, org.apache.logging.log4j.core.StringLayout

@Plugin(name="ESJsonLayout", category="Core", elementType="layout", printObject=true) public class ESJsonLayout extends org.apache.logging.log4j.core.layout.AbstractStringLayout
Formats log events as strings in a json format.

The class is wrapping the PatternLayout with a pattern to format into json. This gives more flexibility and control over how the log messages are formatted in JsonLayout There are fields which are always present in the log line:

  • type - the type of logs. These represent appenders and help docker distinguish log streams.
  • timestamp - ISO8601 with additional timezone ID
  • level - INFO, WARN etc
  • component - logger name, most of the times class name
  • cluster.name - taken from sys:es.logs.cluster_name system property because it is always set
  • node.name - taken from NodeNamePatternConverter, as it can be set in runtime as hostname when not set in elasticsearch.yml
  • node_and_cluster_id - in json as node.id and cluster.uuid - taken from NodeAndClusterIdConverter and present once clusterStateUpdate is first received
  • message - a json escaped message. Multiline messages will be converted to single line with new line explicitly replaced to \n
  • exceptionAsJson - in json as a stacktrace field. Only present when throwable is passed as a parameter when using a logger. Taken from JsonThrowablePatternConverter

It is possible to add more or override them with esmessagefield appender.logger.layout.esmessagefields=message,took,took_millis,total_hits,types,stats,search_type,total_shards,source,id Each of these will be expanded into a json field with a value taken ESLogMessage field. In the example above ... "message": %ESMessageField{message}, "took": %ESMessageField{took} ... the message passed to a logger will be overriden with a value from %ESMessageField{message}

The value taken from %ESMessageField{message} has to be a simple escaped JSON value and is populated in subclasses of ESLogMessage

  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static class 
     

    Nested classes/interfaces inherited from class org.apache.logging.log4j.core.layout.AbstractStringLayout

    org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer, org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer2
  • Field Summary

    Fields inherited from class org.apache.logging.log4j.core.layout.AbstractStringLayout

    DEFAULT_STRING_BUILDER_SIZE, MAX_STRING_BUILDER_SIZE

    Fields inherited from class org.apache.logging.log4j.core.layout.AbstractLayout

    configuration, eventCount, footer, header, LOGGER

    Fields inherited from interface org.apache.logging.log4j.core.Layout

    ELEMENT_TYPE
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    ESJsonLayout(String typeName, Charset charset, String[] esmessagefields)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    createLayout(String type, Charset charset, String[] esmessagefields)
     
    void
    encode(org.apache.logging.log4j.core.LogEvent event, org.apache.logging.log4j.core.layout.ByteBufferDestination destination)
     
     
    static <B extends ESJsonLayout.Builder<B>>
    B
     
    toSerializable(org.apache.logging.log4j.core.LogEvent event)
     
     

    Methods inherited from class org.apache.logging.log4j.core.layout.AbstractStringLayout

    getBytes, getCharset, getContentType, getFooter, getFooterSerializer, getHeader, getHeaderSerializer, getStringBuilder, getStringBuilderEncoder, serializeToBytes, serializeToString, toByteArray, trimToMaxSize

    Methods inherited from class org.apache.logging.log4j.core.layout.AbstractLayout

    getConfiguration, markEvent

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • ESJsonLayout

      protected ESJsonLayout(String typeName, Charset charset, String[] esmessagefields)
  • Method Details

    • createLayout

      @PluginFactory public static ESJsonLayout createLayout(String type, Charset charset, String[] esmessagefields)
    • newBuilder

      @PluginBuilderFactory public static <B extends ESJsonLayout.Builder<B>> B newBuilder()
    • toSerializable

      public String toSerializable(org.apache.logging.log4j.core.LogEvent event)
    • getContentFormat

      public Map<String,String> getContentFormat()
      Specified by:
      getContentFormat in interface org.apache.logging.log4j.core.Layout<String>
      Overrides:
      getContentFormat in class org.apache.logging.log4j.core.layout.AbstractLayout<String>
    • encode

      public void encode(org.apache.logging.log4j.core.LogEvent event, org.apache.logging.log4j.core.layout.ByteBufferDestination destination)
      Specified by:
      encode in interface org.apache.logging.log4j.core.layout.Encoder<org.apache.logging.log4j.core.LogEvent>
      Overrides:
      encode in class org.apache.logging.log4j.core.layout.AbstractLayout<String>
    • toString

      public String toString()
      Overrides:
      toString in class Object