Add a dependency to your application
<dependency>
<groupId>co.elastic.logging</groupId>
<artifactId>logback-ecs-encoder</artifactId>
<version>${ecs-logging-java.version}</version>
</dependency>
If you are not using a dependency management tool, like maven, you have to add both,
logback-ecs-encoder
and ecs-logging-core
jars manually to the classpath.
For example to the $CATALINA_HOME/lib
directory.
src/main/resources/logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<include resource="co/elastic/logging/logback/boot/ecs-file-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ECS_JSON_FILE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
You also need to configure the following properties to your application.properties
:
spring.application.name=my-application
# for Spring Boot 2.2.x+
logging.file.name=/path/to/my-application.log
# for older Spring Boot versions
logging.file=/path/to/my-application.log
All you have to do is to use the co.elastic.logging.logback.EcsEncoder
instead of the default pattern encoder in logback.xml
<encoder class="co.elastic.logging.logback.EcsEncoder">
<serviceName>my-application</serviceName>
</encoder>
Parameter name | Type | Default | Description |
---|---|---|---|
serviceName | String | Sets the service.name field so you can filter your logs by a particular service |
|
eventDataset | String | ${serviceName}.log |
Sets the event.dataset field used by the machine learning job of the Logs app to look for anomalies in the log rate. |
includeMarkers | boolean | false |
Log Markers as tags |
stackTraceAsArray | boolean | false |
Serializes the error.stack_trace as a JSON array where each element is in a new line to improve readability. Note that this requires a slightly more complex Filebeat configuration. |
includeOrigin | boolean | false |
If true , adds the log.origin.file.name , log.origin.file.line and log.origin.function fields. Note that you also have to set includeLocation="true" on your loggers and appenders if you are using the async ones. |
To include any custom field in the output, use following syntax:
<additionalField>
<key>foo</key>
<value>bar</value>
</additionalField>
<additionalField>
<key>baz</key>
<value>qux</value>
</additionalField>