25 Sep 2015
comments powered by Disqus
Spring boot: use YAML to configure log4j2
Let’s see how to use YAML to configure log4j2 on a Spring boot application.
Maven
Basically, you need to exclude from your pom.xml the dependency tospring-boot-starter-logging and add instead
spring-boot-starter-log4j2. Then to work with YAML you have to add the dependency to jackson-dataformat-yaml.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.6.0-rc4</version>
</dependency>If your project does not depend on
spring-boot-starter-webbecause it is not web. Then you will need to add this dependencycom.fasterxml.jackson.core:jackson-databind.
YAML
The configuration goes in a file named log4j2.yml located in the folder resources. Hereunder is an example of
configuration. There are two
appenders, console and
rolling file then, there is the root logger and two specialized loggers for two classes.
Configutation:
status: warn
Appenders:
Console:
name: CONSOLE
target: SYSTEM_OUT
PatternLayout:
Pattern: "%d{ISO8601} %-5p [%c{3}] [%t] %m%n"
RollingFile:
- name: APPLICATION
fileName: ../logs/my-app.log
filePattern: "../logs/$${date:yyyy-MM}/my-app-%d{yyyy-MM-dd}-%i.log.gz"
PatternLayout:
Pattern: "%d{ISO8601} %-5p [%c{3}] [%t] %m%n"
policies:
TimeBasedTriggeringPolicy:
interval: 1
modulate: true
Loggers:
Root:
level: info
AppenderRef:
- ref: CONSOLE
- ref: APPLICATION
Logger:
- name: com.myco.myapp.Foo
additivity: false
level: info
AppenderRef:
- ref: CONSOLE
- ref: APPLICATION
- name: com.myco.myapp.Bar
additivity: false
level: debug
AppenderRef:
- ref: CONSOLE
- ref: APPLICATIONClass
Examples using slf4j:
- In Groovy.
@Slf4j
class Foo {
// some code
log.debug("Test debug: $myvar")
}- In Java.
public class Bar{
private Logger logger = LoggerFactory.getLogger(Bar.class);
// some code
logger.debug("Test debug: {}", myvar);
}