Logging configuration
Structured logging
PuppetDB uses logback, a standard Java logging library. In certain subsystems, namely HA, we provide extended structured logging information. By configuring logback appropriately, you get JSON-formatted log messages with event-specific fields in each message.
Common fields
If you use the recommended logger configuration, as described below, you will see the following fields in each JSON log message:
@timestamp
message
logger_name
thread_name
level
level_value (numeric, suitable for sorting)
stack_trace
Additional relevant fields may be added in any given message, but this base set will always be present.
JSON text
If you want to log JSON data where you would otherwise log regular text, replace the 'encoder' element in your logback.xml with this one:
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp/>
<message/>
<loggerName/>
<threadName/>
<logLevel/>
<logLevelValue/>
<stackTrace/>
<logstashMarkers/>
</providers>
</encoder>
Even though this says 'logstash' on it, it works completely independently from
any log aggregation system. The final <logstashMarkers/>
element inserts our
custom properties into each JSON message.
Logback integration
You can also log directly to logstash with an appender configured like this:
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<remoteHost>logging.dev</remoteHost>
<port>4560</port>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp/>
<message/>
<loggerName/>
<threadName/>
<logLevel/>
<logLevelValue/>
<stackTrace/>
<logstashMarkers/>
</providers>
</encoder>
</appender>
You will also need to add a reference to the appender from the <root>
element:
<root>
...
<appender-ref ref="stash" />
</root>
References
These example configurations should get you started. For more advanced scenarios, the respective tools have good documentation.
Logstash Appender: https://github.com/logstash/logstash-logback-encoder#tcp
JSON Encoder: https://github.com/logstash/logstash-logback-encoder#composite_encoder
Logback configuration: http://logback.qos.ch/manual/configuration.html