Class ESJsonLayout
- All Implemented Interfaces:
org.apache.logging.log4j.core.impl.LocationAware
,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
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
Modifier and TypeClassDescriptionstatic 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
ModifierConstructorDescriptionprotected
ESJsonLayout
(String typeName, Charset charset, String[] esmessagefields, org.apache.logging.log4j.core.config.Configuration config) -
Method Summary
Modifier and TypeMethodDescriptionstatic ESJsonLayout
createLayout
(String type, Charset charset, String[] esmessagefields, org.apache.logging.log4j.core.config.Configuration configuration) void
encode
(org.apache.logging.log4j.core.LogEvent event, org.apache.logging.log4j.core.layout.ByteBufferDestination destination) static <B extends ESJsonLayout.Builder<B>>
BtoSerializable
(org.apache.logging.log4j.core.LogEvent event) toString()
Methods inherited from class org.apache.logging.log4j.core.layout.AbstractStringLayout
getBytes, getCharset, getContentType, getFooter, getFooterSerializer, getHeader, getHeaderSerializer, getStringBuilder, getStringBuilderEncoder, requiresLocation, serializeToBytes, serializeToString, toByteArray, trimToMaxSize
Methods inherited from class org.apache.logging.log4j.core.layout.AbstractLayout
getConfiguration, markEvent
-
Constructor Details
-
ESJsonLayout
-
-
Method Details
-
createLayout
@PluginFactory public static ESJsonLayout createLayout(String type, Charset charset, String[] esmessagefields, org.apache.logging.log4j.core.config.Configuration configuration) -
newBuilder
-
toSerializable
-
getContentFormat
-
encode
public void encode(org.apache.logging.log4j.core.LogEvent event, org.apache.logging.log4j.core.layout.ByteBufferDestination destination) - Specified by:
encode
in interfaceorg.apache.logging.log4j.core.layout.Encoder<org.apache.logging.log4j.core.LogEvent>
- Overrides:
encode
in classorg.apache.logging.log4j.core.layout.AbstractLayout<String>
-
toString
-