Class OpenSearchJsonLayout

java.lang.Object
org.apache.logging.log4j.core.layout.AbstractLayout<java.lang.String>
org.apache.logging.log4j.core.layout.AbstractStringLayout
org.opensearch.common.logging.OpenSearchJsonLayout
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="OpenSearchJsonLayout",
        category="Core",
        elementType="layout",
        printObject=true)
public class OpenSearchJsonLayout
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:opensearch.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 opensearch.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 opensearchmessagefield appender.logger.layout.opensearchmessagefields=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 OpenSearchLogMessage field. In the example above ... "message": %OpenSearchMessageField{message}, "took": %OpenSearchMessageField{took} ... the message passed to a logger will be overriden with a value from %OpenSearchMessageField{message}

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

  • Nested Class Summary

    Nested Classes 
    Modifier and Type Class Description
    static class  OpenSearchJsonLayout.Builder<B extends OpenSearchJsonLayout.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 OpenSearchJsonLayout​(java.lang.String typeName, java.nio.charset.Charset charset, java.lang.String[] opensearchMessageFields)  
  • Method Summary

    Modifier and Type Method Description
    static OpenSearchJsonLayout createLayout​(java.lang.String type, java.nio.charset.Charset charset, java.lang.String[] opensearchmessagefields)  
    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 OpenSearchJsonLayout.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 Details

    • OpenSearchJsonLayout

      protected OpenSearchJsonLayout​(java.lang.String typeName, java.nio.charset.Charset charset, java.lang.String[] opensearchMessageFields)
  • Method Details

    • createLayout

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

      @PluginBuilderFactory public static <B extends OpenSearchJsonLayout.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