Spring Boot provides a powerful and flexible logging API. In this post, we will see how to enable Spring Boot logging with application.properties.
Introduction
Spring allows to set and configure the logger levels using application.properties
file. In this article, we will see how to use application.properties file to configure logging for your Spring Boot application. Here is a sample configuration for Spring Boot logging with application.properties
file.
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
1. Default Logging Configuration
Let’s run the following code with no logging configuration
package com.javadevjournal;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoLoggingController {
private static final Logger LOG = LoggerFactory.getLogger(Application.class);
@GetMapping(value = "/")
public String test(){
LOG.debug("debug message");
LOG.info("This is an info message");
LOG.warn("Warning for this application");
LOG.error("Seems error in the application");
return "test";
}
}
if you run this program, you may have following output in the console:
2019-01-16 17:48:01.049 INFO 60674 --- [nio-8080-exec-1] com.javadevjournal.Application : This is an info message
2019-01-16 17:48:01.049 WARN 60674 --- [nio-8080-exec-1] com.javadevjournal.Application : Warning for this application
2019-01-16 17:48:01.049 ERROR 60674 --- [nio-8080-exec-1] com.javadevjournal.Application : Seems error in the application
Default logging level is INFO. Let’s inspect this pattern before we customize it:
- Date and Time: Millisecond precision and easily sortable.
- Log Level:
ERROR
,WARN
,INFO
,DEBUG
, orTRACE
. - Process ID.
- A
---
separator to distinguish the start of actual log messages. - Thread name: Enclosed in square brackets (maybe truncated for console output).
- Logger name: This is commonly the source class name (often abbreviated).
- The log message.
Let’s see how control and customize Spring Boot logging file.
2. Log Levels
We can use one of TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
to control the log level for our application. Let’s take an example where we want to set the log level for our custom package to the WARN. We can use the ‘logging.level.*=LEVEL
pattern in our application.properties
file for this:
#logging.level.root=WARN
logging.level.com.javadevjournal = WARN
logging.level.org.springframework.web = DEBUG
If we run our above example again with these changes in the application.properties
file, we will see following output in the console:
2019-01-16 17:48:51.415 WARN 60674 --- [nio-8080-exec-4] com.javadevjournal.Application : Warning for this application
2019-01-16 17:48:51.415 ERROR 60674 --- [nio-8080-exec-4] com.javadevjournal.Application : Seems error in the application
3. Spring Boot – Logging Patterns
Spring Boot properties file provide support for logging patterns. To provide logging patterns, use the following two properties in your application.properties
file:
logging.pattern.console= # Appender pattern for output to the console. Supported only with the default Logback setup.
logging.pattern.file= # Appender pattern for output to a file. Supported only with the default Logback setup.
Here is a sample format for your reference:
# Logging pattern for the console
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
logging.pattern.file= "%d{yyyy-MM-dd } [%thread] %-5level %logger{36} - %msg%n"
4. Log Output
To log in the file system, we can use following property in our application.properties
file:
logging.file= # Log file name (for instance, `app.log`)
5. Spring Boot Profiles in Logging
Spring Profiling is a good concept which provides us the flexibility to define properties for the different environment with no code change. Spring Boot provides the same profile mechanism. To use profile specific configuration files, we need to the naming convention of application-{profile}.properties
where profile defines the name of the intended profile. Let’s take an example to create two separate logging configurations for Stage and Production environment.
5.1 application-stage.properties
logging.level.com.javadevjournal=DEBUG
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
5.2 application-production.properties
logging.level.com.javadevjournal=WARN
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
6. Log Group
it’s helpful to group related loggers together so it can configure them at the same time. Let’s take an example where we want to control the logging level for our application. Spring Boot allows you to define logging groups using property file:
logging.group.*= # Log groups to quickly change multiple loggers at the same time
Here is an example to for the reference:
logging.group.javadevjournal=com.javadevjournal.controller, com.javadevjournal.service, com.javadevjournal.util
#We are setting logging level for group using one line.
logging.level.javadevjournal=TRACE
For easy to use, Spring Boot provides following pre-defined groups:
- web –
org.springframework.core.codec, org.springframework.http, org.springframework.web
- sql –
org.springframework.core.codec, org.springframework.http, org.springframework.web
Summary
In this post, we saw how to enable Spring Boot logging with application.properties. We learned how to use the application.properties file to configure and customize the logging output for your application. The complete source code for this post is available on GitHub.