Learn to configure the spring boot logging via application.properties
file in simple and easy-to-follow instructions. In the default structure of a Spring Boot web application, we can locate the application.properties
file under the /resources
folder.
By default, Spring boot uses Logback as the logging provider.
#Log Levels
logging.level.org.springframework=DEBUG
logging.level.com.howtodoinjava=DEBUG
# Log to File
logging.file=${java.io.tmpdir}/app.log
# Log Patterns
logging.pattern.console= %d{yyyy-MM-dd HH:mm:ss} - %msg%n
logging.pattern.file= %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%
1. Default Logging Configuration
To understand default logging, let us put logs in spring boot hello world example. Do not add any configuration to application.properties and invoke the root API to log the following messages.
private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
@RequestMapping("/")
public String home(Map<String, Object> model) {
LOGGER.debug("This is a debug message");
LOGGER.info("This is an info message");
LOGGER.warn("This is a warn message");
LOGGER.error("This is an error message");
model.put("message", "HowToDoInJava Reader !!");
return "index";
}
Start the application. Access the application in the browser and verify log messages in the console.
2017-03-02 23:33:51.318 INFO 3060 --- [nio-8080-exec-1] c.h.app.controller.IndexController : info log statement printed
2017-03-02 23:33:51.319 WARN 3060 --- [nio-8080-exec-1] c.h.app.controller.IndexController : warn log statement printed
2017-03-02 23:33:51.319 ERROR 3060 --- [nio-8080-exec-1] c.h.app.controller.IndexController : error log statement printed
- The default logging level is INFO because the debug log message is not present.
- Spring boot uses a fixed default log pattern configured in different base configuration files.
%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta}
%clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}
The above pattern print these listed log message parts with respective color coding applied:
- Date and Time — Millisecond precision.
- Log Level — ERROR, WARN, INFO, DEBUG or TRACE.
- Process ID.
- A — separator to distinguish the start of actual log messages.
- Thread name — Enclosed in square brackets (may be truncated for console output).
- Logger name — This is usually the source class name (often abbreviated).
- The log message
2. Custom Log Levels
In the application.properties
file, we can define log levels of Spring Boot loggers, application loggers, Hibernate loggers, Thymeleaf loggers, and more. To set the logging level for any logger, add properties starting with logging.level
.
The logging level can be one of one of TRACE
, DEBUG
, INFO
, WARN
, ERROR
, FATAL
, OFF
. The root logger can be configured using logging.level.root
.
logging.level.root=WARN
logging.level.org.springframework.web=ERROR
logging.level.com.howtodoinjava=DEBUG
In the above configuration, I upgraded the log level for application classes to DEBUG (from default INFO). Now observe the logs:
2017-03-02 23:57:14.966 DEBUG 4092 --- [nio-8080-exec-1] c.h.app.controller.IndexController : debug log statement printed
2017-03-02 23:57:14.967 INFO 4092 --- [nio-8080-exec-1] c.h.app.controller.IndexController : info log statement printed
2017-03-02 23:57:14.967 WARN 4092 --- [nio-8080-exec-1] c.h.app.controller.IndexController : warn log statement printed
2017-03-02 23:57:14.967 ERROR 4092 --- [nio-8080-exec-1] c.h.app.controller.IndexController : error log statement printed
3. Custom Log Patterns
To change the logging patterns, use logging.pattern.console
and logging.pattern.file
properties.
# Logging pattern for the console
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
# Logging pattern for file
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
After changing the console logging pattern in the application, log statements are printed as below:
2017-03-03 12:59:13 - This is a debug message
2017-03-03 12:59:13 - This is an info message
2017-03-03 12:59:13 - This is a warn message
2017-03-03 12:59:13 - This is an error message
4. Logging to File Appender
To print the logs in the file, use logging.file
or logging.path
property.
logging.file=c:/users/howtodoinjava/application-debug.log
Verify the logs in the file.
2017-03-03 13:02:50.608 DEBUG 10424 --- [http-nio-8080-exec-1] c.h.app.controller.IndexController : This is a debug message
2017-03-03 13:02:50.608 INFO 10424 --- [http-nio-8080-exec-1] c.h.app.controller.IndexController : This is an info message
2017-03-03 13:02:50.608 WARN 10424 --- [http-nio-8080-exec-1] c.h.app.controller.IndexController : This is a warn message
2017-03-03 13:02:50.609 ERROR 10424 --- [http-nio-8080-exec-1] c.h.app.controller.IndexController : This is an error message
5. Profile Specific Log Configurations
It is desirable to have multiple configurations for any application – where each configuration is specific to a particular runtime environment. In spring boot, you can achieve this by creating multiple application-{profile}.properties
files in same location as application.properties
file.
Profile-specific properties always override the non-profile-specific ones. If several profiles are specified, a last-wins strategy applies. If I have two environments for my application i.e. prod
and dev
then I will create two profile-specific properties files.
application-dev.properties
logging.level.com.howtodoinjava=DEBUG
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
application-prod.properties
logging.level.com.howtodoinjava=ERROR
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
6. Color-coded Logs
If your terminal supports ANSI, the color output will be used to aid readability. You can set spring.output.ansi.enabled
value to either ALWAYS
, NEVER
or DETECT
.
Color coding is configured using the %clr
conversion word. In its simplest form the converter will color the output according to the log level.
FATAL and ERROR – Red
WARN – Yellow
INFO, DEBUG and TRACE – Green
Drop me your questions in the comments section.
Happy Learning !!
Leave a Reply