Spring Boot uses Commons Logging for all internal logging, but leaves the underlying log implementation open. Default configurations are provided for Java Util Logging, Log4J and Logback. In each case there is console output and file output (rotating, 10 Mb file size).
By default, If you use the ‘Starter POMs’, Logback will be used for logging. Appropriate Logback routing is also included to ensure that dependent libraries that use Java Util Logging, Commons Logging, Log4J or SLF4J will all work correctly.
Tip | |
---|---|
There are a lot of logging frameworks available for Java. Don’t worry if the above list seems confusing, generally you won’t need to change your logging dependencies and the Spring Boot defaults will work just fine. |
The default log output from Spring Boot looks like this:
2014-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52 2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms 2014-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2014-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
The following items are output:
ERROR
, WARN
, INFO
, DEBUG
or TRACE
.---
separator to distinguish the start of actual log messages.The default log configuration will echo messages to the console as they are written. By
default ERROR
, WARN
and INFO
level messages are logged. To also log DEBUG
level
messages to the console you can start your application with a --debug
flag.
$ java -jar myapp.jar --debug
If your terminal supports ANSI, color output will be used to aid readability.
By default, log files are written to spring.log
in your temp
directory and rotate at
10 Mb. You can easily customize the output folder by setting the logging.path
property
(for example in your application.properties
). It is also possible to change the filename
using a logging.file
property. Note that if logging.file
is used, then setting logging.path
has no effect.
As with console output, ERROR
, WARN
and INFO
level messages are logged by default.
All the supported logging systems can have the logger levels set in the Spring
Environment
(so for example in application.properties
) using ‘logging.level.*=LEVEL’
where ‘LEVEL’ is one of TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF. Example
application.properties
:
logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR
The various logging systems can be activated by including the appropriate libraries on
the classpath, and further customized by providing a suitable configuration file in the
root of the classpath, or in a location specified by the Spring Environment
property
logging.config
. (Note however that since logging is initialized before the
ApplicationContext
is created, it isn’t possible to control logging from
@PropertySources
in Spring @Configuration
files. System properties and the
conventional Spring Boot external configuration files work just fine.)
Depending on your logging system, the following files will be loaded:
Logging System | Customization |
---|---|
Logback |
|
Log4j |
|
JDK (Java Util Logging) |
|
To help with the customization some other properties are transferred from the Spring
Environment
to System properties:
Spring Environment | System Property | Comments |
---|---|---|
|
| Used in default log configuration if defined. |
|
| Used in default log configuration if defined. |
|
| The current process ID (discovered if possible and when not already defined as an OS environment variable). |
All the logging systems supported can consult System properties when parsing their
configuration files. See the default configurations in spring-boot.jar
for examples.
Warning | |
---|---|
There are know classloading issues with Java Util Logging that cause problems when running from an ‘executable jar’. We recommend that you avoid it if at all possible. |