Logback Reference + Examples
Last updated:Table of Contents
WIP Alert This is a work in progress. Current information is correct but more content may be added in the future.
Custom properties (scala example)
Say you want to define a property called "env"
to indicate whether the application logs are coming from a beta or production environment.
First you need to create a class that implements ch.qos.logback.core.spi.PropertyDefiner
and define a method called getPropertyValue
.
package path.to.my.package
import ch.qos.logback.core.Context
import ch.qos.logback.core.spi.PropertyDefiner
import ch.qos.logback.core.status.Status
class EnvPropertyDefiner extends PropertyDefiner{
// define some expression to indicate whether this app is beta or production
override def getPropertyValue: String = {
if (<insert expression>) "beta" else "production"
}
// these other methods are needed to implement the interface but they aren't
// really needed right now
override def addInfo(msg: String): Unit = ()
override def addInfo(msg: String, ex: Throwable): Unit = ()
override def addWarn(msg: String): Unit = ()
override def addWarn(msg: String, ex: Throwable): Unit = ()
override def addError(msg: String): Unit = ()
override def addError(msg: String, ex: Throwable): Unit = ()
override def addStatus(status: Status): Unit = ()
override def getContext: Context = null
override def setContext(context: Context): Unit = ()
}
Now you need to declare this property in your logback.xml
file:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<define name="env" class="path.to.my.package.EnvPropertyDefiner">
</define>
<!-- other configs omitted -->
After you've defined it as above, you can access the value of your property anywhere in the configuration file via ${env}
:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<define name="env" class="path.to.my.package.EnvPropertyDefiner">
</define>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- including the environment in the log message -->
<pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} ${env} %msg%n</pattern>
</encoder>
</appender>
<!-- other configs omitted -->
Save logs on elasticsearch
TODO