Configure the Java Application Loggers
Before you begin, review the Supported Log Frameworks.
For structured logs, the following MDC keys are included in the log object.
-
appd_node_id
-
appd_bt_id
-
appd_request_guid
This is an example of enrichment using the Logstash encoder.
<appender name="COMPOSITEJSONENCODER" class="ch.qos.logback.core.FileAppender">
<file>compositejsonencoder.log</file>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<fieldName>timestamp</fieldName>
<timeZone>UTC</timeZone>
</timestamp>
<loggerName>
<fieldName>logger</fieldName>
</loggerName>
<logLevel>
<fieldName>level</fieldName>
</logLevel>
<threadName>
<fieldName>thread</fieldName>
</threadName>
<mdc>
<includeMdcKeyName>appd_node_id</includeMdcKeyName>
<includeMdcKeyName>appd_bt_id</includeMdcKeyName>
<includeMdcKeyName>appd_request_guid</includeMdcKeyName>
</mdc>
<stackTrace>
<fieldName>stackTrace</fieldName>
<!-- maxLength - limit the length of the stack trace -->
<throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
<maxDepthPerThrowable>200</maxDepthPerThrowable>
<maxLength>14000</maxLength>
<rootCauseFirst>true</rootCauseFirst>
</throwableConverter>
</stackTrace>
<message />
<throwableClassName>
<fieldName>exceptionClass</fieldName>
</throwableClassName>
</providers>
</encoder>
</appender>
For unstructured logs, the following MDC keys are included in the log object.
-
appd_node_id
-
appd_bt_id
-
appd_request_guid
Here are the appender examples for all the supported log frameworks.
- Logback
-
<configuration> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>app.log</file> <append>false</append> <immediateFlush>true</immediateFlush> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - appd_node_id=%X{appd_node_id} appd_bt_id=%X{appd_bt_id} appd_request_guid=%X{appd_request_guid} - %m%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="FILE"/> </root> </configuration>
- Log4j
-
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration> <appender name="FILE" class="org.apache.log4j.FileAppender"> <param name="File" value="logs/app.log"/> <param name="Append" value="true"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - appd_node_id=%X{appd_node_id} appd_bt_id=%X{appd_bt_id} appd_request_guid=%X{appd_request_guid} - %m%n"/> </layout> </appender> <root> <priority value="INFO"/> <appender-ref ref="FILE"/> </root> </log4j:configuration>
- Log4j2
-
<Configuration> <Appenders> <File name="FILE" fileName="logs/app.log"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - appd_node_id=%X{appd_node_id} appd_bt_id=%X{appd_bt_id} appd_request_guid=%X{appd_request_guid} - %m%n"/> </File> </Appenders> <Loggers> <Root level="INFO"> <AppenderRef ref="FILE"/> </Root> </Loggers> </Configuration>