For a project written in Java and based on Spring Boot, I’m using Syslog for logging. Recently I started liking using YAML for configuration files. There aren’t many nontrivial examples online for Log4J 2.x configuration for Syslog written in YAML. Since it can be tricky to write the configuration properly, I’m sharing with you a working example.
You’ll need to define the host and port of your syslog server, the protocol used and facility for the messages.
In this project, I’m using Spring Cloud Sleuth to easily track correlated events and messages in log files.
In the LoggerFields section, you can specify which fields to include in the message and which format to use. And using the mdcExcludes property you can exclude some MDC keys.
Configuration:
Properties:
Appenders:
Syslog:
name: syslog
host: 172.17.0.1
port: 514
protocol: UDP
facility: local6
connectTimeoutMillis: 10000
reconnectionDelayMillis: 5000
mdcId: mdc
mdcExcludes: "X-B3-SpanId,X-B3-TraceId,X-Span-Export,spanExportable,spanId,traceId"
messageId: mywebapp
appName: mywebapp
charset: UTF-8
ignoreExceptions: true
newLine: true
format: RFC5424
LoggerFields:
KeyValuePair: !!pairs
- key: priority
value: "%p"
- key: category
value: "%c{0}"
- key: pid
value: "%pid"
- key: traceSpanId
value: "%X{traceId}/%X{spanId}"
- key: exception
value: "%ex"
Loggers:
Root:
level: WARN
AppenderRef:
- ref: syslog
Logger:
- name: xyz.joshefin.app
level: DEBUG
- name: org.springframework
level: WARN
And here is an example of a line from the log file:
2019-06-21T20:56:41.847Z myserver mywebapp info Just a message. [mdc@18060 category="MyFavouriteClass" exception="" pid="1234" priority="INFO" traceSpanId="f54b0ca63e9a3070/f54b0ca63e9a3070"]
2 comments
I saw your posting about Ruuvi.
I have had pleasing results using rsyslog to distribute Ruuvi information from RaspberryPi Zero to other systems.
My Thoughts are at http://MyBeacons.info/jakoavain.html
Interesting approach. Thanks for sharing.