Spring Boot

Logging Configuration in Spring Boot

<div dir&equals;"ltr" style&equals;"text-align&colon; justify&semi;">&NewLine;<div style&equals;"text-align&colon; justify&semi;">&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;">Hello friends&excl;&excl;&excl; Once again we are going to discuss very important topic about spring boot configuration&period; We always curious about defining tacking or logs basis things own way&period; Like Pizza organization provide the tracking about the ordered pizza what is the current status of pizza&period; Still we supposed to see more detailed status like information about pizza base or how to make pizza and also supposed there no problem happens in preparing the pizza&period;<&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;"><span style&equals;"font-size&colon; 12pt&semi;"> <&sol;span><&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;">Logging is not the core requirement for any business application but we cannot ignore it because logging is very important part for any application for tracking information about application and helpful for developer in debugging the application&period; In some applications developers use synchronous logging which can impact the application’s performance&period; Logging libraries like <b>Logback&comma; Log4j2 provide async logging<&sol;b>&period;<&sol;div>&NewLine;<div><&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;">Spring Boot provides support for logging and uses Commons Logging for all internal logging&comma; but leaves the underlying log implementation open&period; Default configurations are provided for <b>Java Util Logging&comma; Log4J2 and Logback<&sol;b>&period; In each case loggers are pre-configured to use console output with optional file output also available&period;<&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;">By default&comma; if you use the &OpenCurlyQuote;<b>Starters<&sol;b>’&comma; Logback will be used for logging&period; Here we are going to use default logging by Spring Boot&period;<&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<h2 style&equals;"font-family&colon; calibri&comma; sans-serif&semi;"><b>Default Logging Format in Spring Boot<&sol;b><&sol;h2>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;">The default logs look like as below<&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<pre class&equals;"highlight" style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;">2016-07-24 20&colon;31&colon;45&period;280 INFO 10220 --- &lbrack; main&rsqb; c&period;d&period;SpringBootHelloWorldApplication &colon; Starting SpringBootHelloWorldApplication on NODTBSL206AG with PID 10220 &lpar;started by Dinesh&period;Rajput in D&colon;personal dataspring-boot-workspaceSpringBootHelloWorld&rpar; &NewLine;2016-07-24 20&colon;31&colon;45&period;286 INFO 10220 --- &lbrack; main&rsqb; c&period;d&period;SpringBootHelloWorldApplication &colon; No active profile set&comma; falling back to default profiles&colon; default &NewLine;2016-07-24 20&colon;31&colon;45&period;502 INFO 10220 --- &lbrack; main&rsqb; ationConfigEmbeddedWebApplicationContext &colon; Refreshing org&period;springframework&period;boot&period;context&period;embedded&period;AnnotationConfigEmbeddedWebApplicationContext&commat;1809907&colon; startup date &lbrack;Sun Jul 24 20&colon;31&colon;45 IST 2016&rsqb;&semi; root of context hierarchy &NewLine;2016-07-24 20&colon;31&colon;48&period;201 INFO 10220 --- &lbrack; main&rsqb; s&period;b&period;c&period;e&period;t&period;TomcatEmbeddedServletContainer &colon; Tomcat initialized with port&lpar;s&rpar;&colon; 8080 &lpar;http&rpar; &NewLine;2016-07-24 20&colon;31&colon;48&period;226 INFO 10220 --- &lbrack; main&rsqb; o&period;apache&period;catalina&period;core&period;StandardService &colon; Starting service Tomcat &NewLine;2016-07-24 20&colon;31&colon;48&period;228 INFO 10220 --- &lbrack; main&rsqb; org&period;apache&period;catalina&period;core&period;StandardEngine &colon; Starting Servlet Engine&colon; Apache Tomcat&sol;8&period;5&period;3 &NewLine;2016-07-24 20&colon;31&colon;48&period;485 INFO 10220 --- &lbrack;ost-startStop-1&rsqb; o&period;a&period;c&period;c&period;C&period;&lbrack;Tomcat&rsqb;&period;&lbrack;localhost&rsqb;&period;&lbrack;&sol;&rsqb; &colon; Initializing Spring embedded WebApplicationContext &NewLine;2016-07-24 20&colon;31&colon;48&period;485 INFO 10220 --- &lbrack;ost-startStop-1&rsqb; o&period;s&period;web&period;context&period;ContextLoader &colon; Root WebApplicationContext&colon; initialization completed in 2993 ms &NewLine;<&sol;pre>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;">The following items are output&colon;<&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;">&NewLine;<p>&nbsp&semi;<&sol;p>&NewLine;<ul>&NewLine;<li><b>Date and Time<&sol;b>&colon; Millisecond precision and easily sort able&period;<&sol;li>&NewLine;<li><b>Log Level&colon;<&sol;b> ERROR&comma; WARN&comma; INFO&comma; DEBUG or TRACE&period;<&sol;li>&NewLine;<li><b>Process ID&period;<&sol;b><&sol;li>&NewLine;<li>A<b> &&num;8212&semi; <&sol;b>Separator to distinguish the start of actual log messages&period;<&sol;li>&NewLine;<li><b>Thread name&colon;<&sol;b>&ThinSpace;Enclosed in square brackets &lpar;may be truncated for console output&rpar;&period;<&sol;li>&NewLine;<li><b>Logger name&colon;<&sol;b>&ThinSpace;This is usually the source class name &lpar;often abbreviated&rpar;&period;<&sol;li>&NewLine;<&sol;ul>&NewLine;<&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;">The log message&period;<&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;">The default log level configured by logback is <b>DEBUG <&sol;b>i&period;e any messages logged at <b>ERROR<&sol;b>&comma; <b>WARN<&sol;b>&comma; <b>INFO <&sol;b>and <b>DEBUG <&sol;b>get printed on the console&period;<&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<h2 style&equals;"font-family&colon; calibri&comma; sans-serif&semi;"><b>Create Spring Boot Maven Project<&sol;b><&sol;h2>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;">Let’s create a Maven Spring Boot project for customizing logging configuration&period;<&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;"><b>POM&period;XML<&sol;b><&sol;div>&NewLine;<div style&equals;"font-family&colon; calibri&comma; sans-serif&semi; font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<pre class&equals;"highlight" style&equals;"font-size&colon; 12pt&semi;">&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"UTF-8"&quest;&gt&semi; &NewLine;&lt&semi;project xmlns&equals;"http&colon;&sol;&sol;maven&period;apache&period;org&sol;POM&sol;4&period;0&period;0" xmlns&colon;xsi&equals;"http&colon;&sol;&sol;www&period;w3&period;org&sol;2001&sol;XMLSchema-instance" &NewLine; xsi&colon;schemaLocation&equals;"http&colon;&sol;&sol;maven&period;apache&period;org&sol;POM&sol;4&period;0&period;0 http&colon;&sol;&sol;maven&period;apache&period;org&sol;xsd&sol;maven-4&period;0&period;0&period;xsd"&gt&semi; &NewLine; &lt&semi;modelVersion&gt&semi;4&period;0&period;0&lt&semi;&sol;modelVersion&gt&semi; &NewLine; &NewLine; &lt&semi;groupId&gt&semi;com&period;dineshonjava&lt&semi;&sol;groupId&gt&semi; &NewLine; &lt&semi;artifactId&gt&semi;SpringBootHelloWorld&lt&semi;&sol;artifactId&gt&semi; &NewLine; &lt&semi;version&gt&semi;0&period;0&period;1-SNAPSHOT&lt&semi;&sol;version&gt&semi; &NewLine; &lt&semi;packaging&gt&semi;jar&lt&semi;&sol;packaging&gt&semi; &NewLine; &NewLine; &lt&semi;name&gt&semi;SpringBootHelloWorld&lt&semi;&sol;name&gt&semi; &NewLine; &lt&semi;description&gt&semi;SpringBootHelloWorld project for Spring Boot&lt&semi;&sol;description&gt&semi; &NewLine; &NewLine; &lt&semi;parent&gt&semi; &NewLine; &lt&semi;groupId&gt&semi;org&period;springframework&period;boot&lt&semi;&sol;groupId&gt&semi; &NewLine; &lt&semi;artifactId&gt&semi;spring-boot-starter-parent&lt&semi;&sol;artifactId&gt&semi; &NewLine; &lt&semi;version&gt&semi;1&period;4&period;0&period;RC1&lt&semi;&sol;version&gt&semi; &NewLine; &lt&semi;relativePath&sol;&gt&semi; &lt&semi;&excl;-- lookup parent from repository --&gt&semi; &NewLine; &lt&semi;&sol;parent&gt&semi; &NewLine; &NewLine; &lt&semi;properties&gt&semi; &NewLine; &lt&semi;project&period;build&period;sourceEncoding&gt&semi;UTF-8&lt&semi;&sol;project&period;build&period;sourceEncoding&gt&semi; &NewLine; &lt&semi;java&period;version&gt&semi;1&period;8&lt&semi;&sol;java&period;version&gt&semi; &NewLine; &lt&semi;&sol;properties&gt&semi; &NewLine; &NewLine; &lt&semi;dependencies&gt&semi; &NewLine; &lt&semi;dependency&gt&semi; &NewLine; &lt&semi;groupId&gt&semi;org&period;springframework&period;boot&lt&semi;&sol;groupId&gt&semi; &NewLine; &lt&semi;artifactId&gt&semi;spring-boot-starter-web&lt&semi;&sol;artifactId&gt&semi; &NewLine; &lt&semi;&sol;dependency&gt&semi; &NewLine; &NewLine; &lt&semi;dependency&gt&semi; &NewLine; &lt&semi;groupId&gt&semi;org&period;springframework&period;boot&lt&semi;&sol;groupId&gt&semi; &NewLine; &lt&semi;artifactId&gt&semi;spring-boot-starter-test&lt&semi;&sol;artifactId&gt&semi; &NewLine; &lt&semi;scope&gt&semi;test&lt&semi;&sol;scope&gt&semi; &NewLine; &lt&semi;&sol;dependency&gt&semi; &NewLine; &lt&semi;&sol;dependencies&gt&semi; &NewLine; &NewLine; &lt&semi;build&gt&semi; &NewLine; &lt&semi;plugins&gt&semi; &NewLine; &lt&semi;plugin&gt&semi; &NewLine; &lt&semi;groupId&gt&semi;org&period;springframework&period;boot&lt&semi;&sol;groupId&gt&semi; &NewLine; &lt&semi;artifactId&gt&semi;spring-boot-maven-plugin&lt&semi;&sol;artifactId&gt&semi; &NewLine; &lt&semi;&sol;plugin&gt&semi; &NewLine; &lt&semi;&sol;plugins&gt&semi; &NewLine; &lt&semi;&sol;build&gt&semi; &NewLine;&lt&semi;&sol;project&gt&semi; &NewLine;<&sol;pre>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">In above <b>pom&period;xml<&sol;b> we do not need to add the logging dependency explicitly because dependency <b>spring-boot-starter<&sol;b> includes the dependencies for logging <b>spring-boot-starter-logging<&sol;b>&period; The<b> spring-boot-starter-logging<&sol;b> includes <b>SLF4J <&sol;b>and <b>logback <&sol;b>dependencies with appropriate <b>SLF4J <&sol;b>wrappers for other logging libraries&period;<&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">Now let’s see Class file where we have logs message<&sol;div>&NewLine;<pre class&equals;"highlight" style&equals;"font-size&colon; 12pt&semi;">package com&period;dineshonjava&semi; &NewLine; &NewLine;import org&period;slf4j&period;Logger&semi; &NewLine;import org&period;slf4j&period;LoggerFactory&semi; &NewLine;import org&period;springframework&period;boot&period;SpringApplication&semi; &NewLine;import org&period;springframework&period;boot&period;autoconfigure&period;SpringBootApplication&semi; &NewLine;import org&period;springframework&period;web&period;bind&period;annotation&period;RequestMapping&semi; &NewLine;import org&period;springframework&period;web&period;bind&period;annotation&period;RestController&semi; &NewLine; &NewLine;&commat;RestController &NewLine;&commat;SpringBootApplication &NewLine;public class SpringBootHelloWorldApplication &lbrace; &NewLine; &NewLine;private static final Logger logger &equals; LoggerFactory&period;getLogger&lpar;SpringBootHelloWorldApplication&period;class&rpar;&semi; &NewLine; &NewLine; &NewLine;&commat;RequestMapping&lpar;"&sol;"&rpar; &NewLine; String home&lpar;&rpar; &lbrace; &NewLine; return "Hello World&excl;"&semi; &NewLine; &rcub; &NewLine; &NewLine;public static void main&lpar;String&lbrack;&rsqb; args&rpar; &lbrace; &NewLine; SpringApplication&period;run&lpar;SpringBootHelloWorldApplication&period;class&comma; args&rpar;&semi; &NewLine; logger&period;error&lpar;"Message logged at ERROR level"&rpar;&semi; &NewLine; logger&period;warn&lpar;"Message logged at WARN level"&rpar;&semi; &NewLine; logger&period;info&lpar;"Message logged at INFO level"&rpar;&semi; &NewLine; logger&period;debug&lpar;"Message logged at DEBUG level"&rpar;&semi; &NewLine;&rcub; &NewLine;&rcub; &NewLine; &NewLine;<&sol;pre>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">There are following logs look like after running above class&period;<&sol;div>&NewLine;<pre class&equals;"highlight" style&equals;"font-size&colon; 12pt&semi;">2016-07-24 20&colon;57&colon;40&period;828 ERROR 3024 --- &lbrack; main&rsqb; c&period;d&period;SpringBootHelloWorldApplication &colon; Message logged at ERROR level &NewLine;2016-07-24 20&colon;57&colon;40&period;828 WARN 3024 --- &lbrack; main&rsqb; c&period;d&period;SpringBootHelloWorldApplication &colon; Message logged at WARN level &NewLine;2016-07-24 20&colon;57&colon;40&period;828 INFO 3024 --- &lbrack; main&rsqb; c&period;d&period;SpringBootHelloWorldApplication &colon; Message logged at INFO level &NewLine;<&sol;pre>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<h2 style&equals;"font-size&colon; 12pt&semi;"><b>Customizing default Configuration for Logging&colon; <&sol;b><&sol;h2>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">By adding <b>logback&period;xml<&sol;b> file to the application we can override the default logging configuration providing by the Spring Boot&period; This file place in the <b>classpath &lpar;src&sol;main&sol;resources&rpar;<&sol;b> of the application for Spring Boot to pick the custom configuration&period;<&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><b>Logback&period;xml<&sol;b><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<pre class&equals;"highlight" style&equals;"font-size&colon; 12pt&semi;">&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"UTF-8"&quest;&gt&semi; &NewLine;&lt&semi;configuration&gt&semi; &NewLine; &lt&semi;appender name&equals;"STDOUT" class&equals;"ch&period;qos&period;logback&period;core&period;ConsoleAppender"&gt&semi; &NewLine; &lt&semi;&excl;-- Log message format --&gt&semi; &NewLine; &lt&semi;encoder&gt&semi; &NewLine; &lt&semi;pattern&gt&semi;&percnt;d&lbrace;HH&colon;mm&colon;ss&period;SSS&rcub; &lbrack;&percnt;thread&rsqb; &percnt;-5level &percnt;logger&lbrace;36&rcub; - &percnt;msg&percnt;n &NewLine; &lt&semi;&sol;pattern&gt&semi; &NewLine; &lt&semi;&sol;encoder&gt&semi; &NewLine; &lt&semi;&sol;appender&gt&semi; &NewLine; &NewLine; &lt&semi;&excl;-- Setting the root level of logging to INFO --&gt&semi; &NewLine; &lt&semi;root level&equals;"info"&gt&semi; &NewLine; &lt&semi;appender-ref ref&equals;"STDOUT" &sol;&gt&semi; &NewLine; &lt&semi;&sol;root&gt&semi; &NewLine;&lt&semi;&sol;configuration&gt&semi; &NewLine;<&sol;pre>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><b>There are following things we have note&colon;<&sol;b><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">&NewLine;<p>&nbsp&semi;<&sol;p>&NewLine;<ul>&NewLine;<li>We are using a appender <b>STDOUT <&sol;b>using <b>ConsoleAppender <&sol;b>which prints to the console<&sol;li>&NewLine;<li>We are giving <b>pattern <&sol;b>to the <b>appender <&sol;b>to build the <b>log message<&sol;b><&sol;li>&NewLine;<li>Set up a root logger which logs any message above <b>INFO <&sol;b>level using the <b>STDOUT <&sol;b>appender<&sol;li>&NewLine;<&sol;ul>&NewLine;<&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div class&equals;"separator" style&equals;"clear&colon; both&semi; font-size&colon; 12pt&semi; text-align&colon; center&semi;"><img src&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;wp-content&sol;uploads&sol;2016&sol;07&sol;Spring-boot-logging&period;jpg" border&equals;"0" &sol;><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">There are following logs look like after running this application&period;<&sol;div>&NewLine;<pre class&equals;"highlight" style&equals;"font-size&colon; 12pt&semi;">21&colon;14&colon;46&period;352 &lbrack;main&rsqb; ERROR c&period;d&period;SpringBootHelloWorldApplication - Message logged at ERROR level &NewLine;21&colon;14&colon;46&period;352 &lbrack;main&rsqb; WARN c&period;d&period;SpringBootHelloWorldApplication - Message logged at WARN level &NewLine;21&colon;14&colon;46&period;352 &lbrack;main&rsqb; INFO c&period;d&period;SpringBootHelloWorldApplication - Message logged at INFO level &NewLine;<&sol;pre>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">We have to note here in above logs there is no <b>DEBUG <&sol;b>logs printed&period;<&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<h2 style&equals;"font-size&colon; 12pt&semi;"><b>Printing Logs into a File&colon;<&sol;b><&sol;h2>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">By default&comma; Spring Boot will only log to the console and will not write log files&period; If you want to write log files in addition to the console output you need to set a <b><i>logging&period;file<&sol;i><&sol;b> or <b><i>logging&period;path<&sol;i><&sol;b> property in your <b>application&period;properties<&sol;b>&period;<&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">There are following cases for logging property&colon;<&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">&NewLine;<p>&nbsp&semi;<&sol;p>&NewLine;<ul>&NewLine;<li>If No <b><i>logging&period;path<&sol;i><&sol;b> and No <b><i>logging&period;file<&sol;i><&sol;b> then Console only logging&period;<&sol;li>&NewLine;<li>If No <b><i>logging&period;path<&sol;i><&sol;b> and Specify <b><i>logging&period;file<&sol;i><&sol;b> then writes to the specified log file&period; Names can be an exact location or relative to the current directory&period;<&sol;li>&NewLine;<li>If Specify <b><i>logging&period;path<&sol;i><&sol;b> and No <b><i>logging&period;file<&sol;i><&sol;b> then writes spring&period;log to the specified directory&period; Names can be an exact location or relative to the current directory&period;<&sol;li>&NewLine;<&sol;ul>&NewLine;<&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">Log files will rotate when they reach <b>10 Mb<&sol;b> and as with console output&comma; <b>ERROR<&sol;b>&comma; <b>WARN <&sol;b>and <b>INFO <&sol;b>level messages are logged by default&period;<&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">Now let’s see the following changes we are made in the <b>logback&period;xml<&sol;b> as below<&sol;div>&NewLine;<pre class&equals;"highlight" style&equals;"font-size&colon; 12pt&semi;">&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"UTF-8"&quest;&gt&semi; &NewLine;&lt&semi;configuration&gt&semi; &NewLine; &lt&semi;appender name&equals;"STDOUT" class&equals;"ch&period;qos&period;logback&period;core&period;ConsoleAppender"&gt&semi; &NewLine; &lt&semi;&excl;-- Log message format --&gt&semi; &NewLine; &lt&semi;encoder&gt&semi; &NewLine; &lt&semi;pattern&gt&semi;&percnt;d&lbrace;HH&colon;mm&colon;ss&period;SSS&rcub; &lbrack;&percnt;thread&rsqb; &percnt;-5level &percnt;logger&lbrace;36&rcub; - &percnt;msg&percnt;n&lt&semi;&sol;pattern&gt&semi; &NewLine; &lt&semi;&sol;encoder&gt&semi; &NewLine; &lt&semi;&sol;appender&gt&semi; &NewLine; &lt&semi;&excl;-- Need appender to write to file --&gt&semi; &NewLine; &lt&semi;appender name&equals;"FILE" class&equals;"ch&period;qos&period;logback&period;core&period;FileAppender"&gt&semi; &NewLine; &lt&semi;&excl;-- Name of the file where the log messages are written --&gt&semi; &NewLine; &lt&semi;file&gt&semi;MySpringBootApp&period;log&lt&semi;&sol;file&gt&semi; &NewLine; &lt&semi;encoder&gt&semi; &NewLine; &lt&semi;pattern&gt&semi;&percnt;d&lbrace;HH&colon;mm&colon;ss&period;SSS&rcub; &lbrack;&percnt;thread&rsqb; &percnt;-5level &percnt;logger&lbrace;36&rcub; - &percnt;msg&percnt;n&lt&semi;&sol;pattern&gt&semi; &NewLine; &lt&semi;&sol;encoder&gt&semi; &NewLine; &lt&semi;&sol;appender&gt&semi; &NewLine; &lt&semi;logger name&equals;"com&period;dineshonjava&period;service" level&equals;"warn"&gt&semi; &NewLine; &lt&semi;appender-ref ref&equals;"FILE" &sol;&gt&semi; &NewLine; &lt&semi;&sol;logger&gt&semi; &NewLine; &NewLine; &lt&semi;&excl;-- Setting the root level of logging to INFO --&gt&semi; &NewLine; &lt&semi;root level&equals;"info"&gt&semi; &NewLine; &lt&semi;appender-ref ref&equals;"FILE" &sol;&gt&semi; &NewLine; &lt&semi;&sol;root&gt&semi; &NewLine;&lt&semi;&sol;configuration&gt&semi; &NewLine;<&sol;pre>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">Here we are introducing one more file &OpenCurlyDoubleQuote;<b>HelloService&period;java<&sol;b>” for logging purpose as below&colon;<&sol;div>&NewLine;<pre class&equals;"highlight" style&equals;"font-size&colon; 12pt&semi;">package com&period;dineshonjava&period;service&semi; &NewLine; &NewLine;import org&period;slf4j&period;Logger&semi; &NewLine;import org&period;slf4j&period;LoggerFactory&semi; &NewLine;public class HelloService &lbrace; &NewLine;private Logger logger &equals; LoggerFactory&period;getLogger&lpar;HelloService&period;class&rpar;&semi; &NewLine;public void service&lpar;&rpar;&lbrace; &NewLine; logger&period;info&lpar;"Message at INFO level from HelloService&period;service&lpar;&rpar;"&rpar;&semi; &NewLine; logger&period;warn&lpar;"Message at WARN level from HelloService&period;service&lpar;&rpar;"&rpar;&semi; &NewLine;&rcub; &NewLine;&rcub; &NewLine;<&sol;pre>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">Now running the application will redirect all the log messages to the file <b>MySpringBootApp&period;log<&sol;b> present in the current directory&period;<&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div class&equals;"separator" style&equals;"clear&colon; both&semi; font-size&colon; 12pt&semi; text-align&colon; center&semi;"><img src&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;wp-content&sol;uploads&sol;2016&sol;07&sol;Spring-boot-logging-2&period;jpg" border&equals;"0" &sol;><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<h2><b>Custom log configuration<&sol;b><&sol;h2>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">The various logging systems can be activated by including the appropriate libraries on the classpath&comma; and further customized by providing a suitable configuration file in the root of the classpath&comma; or in a location specified by the Spring Environment property <b><i>logging&period;config<&sol;i><&sol;b>&period;<&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">Depending on your logging system&comma; the following files will be loaded&colon;<&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<ol>&NewLine;<li><b>Logback <&sol;b>-&gt&semi; logback-spring&period;xml&comma; logback-spring&period;groovy&comma; logback&period;xml or logback&period;groovy<&sol;li>&NewLine;<li><b>Log4j2 <&sol;b>-&gt&semi; log4j2-spring&period;xml or log4j2&period;xml<&sol;li>&NewLine;<li><b>JDK &lpar;Java Util Logging&rpar; <&sol;b>-&gt&semi; logging&period;properties<&sol;li>&NewLine;<&sol;ol>&NewLine;<p>&nbsp&semi;<&sol;p>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">There are following properties we can use for custom log configuration<&sol;div>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<ol>&NewLine;<li><b><i>logging&period;file<&sol;i><&sol;b> -&gt&semi; Used in default log configuration if defined for logging file name&period;<&sol;li>&NewLine;<li><b><i>logging&period;path<&sol;i><&sol;b> -&gt&semi; Used in default log configuration if defined for logging file path of directory&period;<&sol;li>&NewLine;<li><b><i>logging&period;pattern&period;console<&sol;i><&sol;b> -&gt&semi; The log pattern to use on the console&period;<&sol;li>&NewLine;<li><b><i>logging&period;pattern&period;file<&sol;i><&sol;b> -&gt&semi; The log pattern to use in a file&period;<&sol;li>&NewLine;<li><b><i>logging&period;pattern&period;level<&sol;i><&sol;b> -&gt&semi; The format to use to render the log level&period;<&sol;li>&NewLine;<li><b><i>logging&period;exception-conversion-word<&sol;i><&sol;b> -&gt&semi; The conversion word that’s used when logging exceptions&period;<&sol;li>&NewLine;<&sol;ol>&NewLine;<p>&nbsp&semi;<&sol;p>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;"><&sol;div>&NewLine;<h2><b>Summary<&sol;b><&sol;h2>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">Here we have seen enough things about how to use the logging processes in Spring Boot application&period; First we have see about the default logging support in the Spring Boot applications and then we have made it how to override them by modifying the <b>logback&period;xml<&sol;b> file&period; And also we have discussed list of all properties those we have used to customize the logging configuration in the spring boot application&period;<&sol;div>&NewLine;<p>&nbsp&semi;<&sol;p>&NewLine;<div style&equals;"font-size&colon; 12pt&semi;">Happy Spring Boot Learning&excl;&excl;&excl;<&sol;div>&NewLine;<&sol;div>&NewLine;<p>&nbsp&semi;<&sol;p>&NewLine;<div style&equals;"background-color&colon; &num;f2f9fc&semi; border-radius&colon; 3px&semi; border&colon; 1px solid &num;c9e6f2&semi; line-height&colon; 1&period;45&semi; padding&colon; 16px&semi;">&NewLine;<p><b>Spring Boot Related Topics<&sol;b><&sol;p>&NewLine;<ol style&equals;"text-align&colon; left&semi;">&NewLine;<li><b><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;introduction-to-spring-boot-a-spring-boot-complete-guide&sol;">Introduction to Spring Boo<&sol;a>t<&sol;b><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;essentials-key-components-and-internals-of-spring-boot-framework&sol;"><b>Essentials and Key Components of Spring Boot<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;spring-boot-cli-installation-and-hello-world-example&sol;"><b>Spring Boot CLI Installation and Hello World Example<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;spring-boot-initilizr-web-interface-and-examples&sol;"><b>Spring Boot Initializr Web Interface<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;spring-boot-initilizr-with-ides-via-spring-tool-suite&sol;"><b>Spring Boot Initializr With IDEs<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;spring-boot-initializr-with-spring-boot-cli&sol;"><b>Spring Boot Initializr With Spring Boot CLI<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;installing-spring-boot&sol;"><b>Installing Spring Boot<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;developing-your-first-spring-boot-application-hello-world&sol;"><b>Developing your first Spring Boot application<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;customizing-spring-boot-auto-configuration&sol;"><b>External Configurations for Spring Boot Applications<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;spring-boot-with-spring-mvc-application&sol;"><b>Spring Boot and Spring MVC<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;working-with-sql-databases-in-spring-boot-application&sol;"><b>Working with SQL Databases and Spring Boot<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;mysql-configuration-with-spring-boot&sol;"><b>MySQL Configurations<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;spring-data-jpa-using-in-spring-boot-application&sol;"><b>Spring Data JPA using Spring Boot Application<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;spring-boot-with-nosql-technologies&sol;"><b>Spring Boot with NoSQL technologies<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;spring-cache-tutorial&sol;"><b>Spring Cache Tutorial<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;spring-security-tutorial-using-spring-boot&sol;"><b>Spring Security Tutorial with Spring Boot<&sol;b><&sol;a><&sol;li>&NewLine;<li><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;spring-boot-and-mongodb-in-rest-application&sol;"><b>Spring Boot and MongoDB in REST Application<&sol;b><&sol;a><&sol;li>&NewLine;<li><b><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;spring-boot-actuator-complete-guide&sol;">Complete Guide for Spring Boot Actuator<&sol;a><&sol;b><&sol;li>&NewLine;<li><b><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;microservices-with-spring-boot&sol;">Microservices with Spring Boot<&sol;a><&sol;b><&sol;li>&NewLine;<&sol;ol>&NewLine;<&sol;div>&NewLine;<&sol;div>&NewLine;<&sol;div>&NewLine;<div class&equals;"wp-post-navigation"> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <div class&equals;"wp-post-navigation-pre"> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;customizing-spring-boot-auto-configuration&sol;">Previous<&sol;a> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <&sol;div> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <div class&equals;"wp-post-navigation-next"> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;spring-boot-with-spring-mvc-application&sol;">Next<&sol;a> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <&sol;div> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;<&sol;div>&NewLine;<script type&equals;"text&sol;javascript">&NewLine;jQuery&lpar;document&rpar;&period;ready&lpar;function&lpar;&dollar;&rpar; &lbrace;&NewLine; &dollar;&period;post&lpar;'https&colon;&sol;&sol;dineshonjava&period;com&sol;wp-admin&sol;admin-ajax&period;php'&comma; &lbrace;action&colon; 'mts&lowbar;view&lowbar;count'&comma; id&colon; '138'&rcub;&rpar;&semi;&NewLine;&rcub;&rpar;&semi;&NewLine;<&sol;script>

Dinesh Rajput

Dinesh Rajput is the chief editor of a website Dineshonjava, a technical blog dedicated to the Spring and Java technologies. It has a series of articles related to Java technologies. Dinesh has been a Spring enthusiast since 2008 and is a Pivotal Certified Spring Professional, an author of a book Spring 5 Design Pattern, and a blogger. He has more than 10 years of experience with different aspects of Spring and Java design and development. His core expertise lies in the latest version of Spring Framework, Spring Boot, Spring Security, creating REST APIs, Microservice Architecture, Reactive Pattern, Spring AOP, Design Patterns, Struts, Hibernate, Web Services, Spring Batch, Cassandra, MongoDB, and Web Application Design and Architecture. He is currently working as a technology manager at a leading product and web development company. He worked as a developer and tech lead at the Bennett, Coleman & Co. Ltd and was the first developer in his previous company, Paytm. Dinesh is passionate about the latest Java technologies and loves to write technical blogs related to it. He is a very active member of the Java and Spring community on different forums. When it comes to the Spring Framework and Java, Dinesh tops the list!

Share
Published by
Dinesh Rajput

Recent Posts

Strategy Design Patterns using Lambda

Strategy Design Patterns We can easily create a strategy design pattern using lambda. To implement…

4 years ago

Decorator Pattern using Lambda

Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…

4 years ago

Delegating pattern using lambda

Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…

4 years ago

Spring Vs Django- Know The Difference Between The Two

Technology has emerged a lot in the last decade, and now we have artificial intelligence;…

4 years ago

TOP 20 MongoDB INTERVIEW QUESTIONS 2022

Managing a database is becoming increasingly complex now due to the vast amount of data…

4 years ago

Scheduler @Scheduled Annotation Spring Boot

Overview In this article, we will explore Spring Scheduler how we could use it by…

4 years ago