Class ESJsonLayout

  • All Implemented Interfaces:
    org.apache.logging.log4j.core.Layout<java.lang.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  ESJsonLayout.Builder<B extends ESJsonLayout.Builder<B>>  
      • 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​(java.lang.String typeName, java.nio.charset.Charset charset, java.lang.String[] esmessagefields)  
    • Method Summary

      Modifier and Type Method Description
      static ESJsonLayout createLayout​(java.lang.String type, java.nio.charset.Charset charset, java.lang.String[] esmessagefields)  
      void encode​(org.apache.logging.log4j.core.LogEvent event, org.apache.logging.log4j.core.layout.ByteBufferDestination destination)  
      java.util.Map<java.lang.String,​java.lang.String> getContentFormat()  
      static <B extends ESJsonLayout.Builder<B>>
      B
      newBuilder()  
      java.lang.String toSerializable​(org.apache.logging.log4j.core.LogEvent event)  
      java.lang.String toString()  
      • 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 Detail

      • ESJsonLayout

        protected ESJsonLayout​(java.lang.String typeName,
                               java.nio.charset.Charset charset,
                               java.lang.String[] esmessagefields)
    • Method Detail

      • createLayout

        @PluginFactory
        public static ESJsonLayout createLayout​(java.lang.String type,
                                                java.nio.charset.Charset charset,
                                                java.lang.String[] esmessagefields)
      • newBuilder

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

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

        public java.util.Map<java.lang.String,​java.lang.String> getContentFormat()
        Specified by:
        getContentFormat in interface org.apache.logging.log4j.core.Layout<java.lang.String>
        Overrides:
        getContentFormat in class org.apache.logging.log4j.core.layout.AbstractLayout<java.lang.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<java.lang.String>
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object