Learn to create multiple log files in spring boot applications using multiple file appenders. Learn to configure all file appenders with rollover policies, archiving etc. with log4j2 and logback configurations.
1. Multiple Log Files using Logback
The following logback.xml
file contains 5 loggers. We can create more loggers as per our needs.
console
– Logs output to console. Include all logs statements.applicationLog
– Logs output toapplication.log
. Includes applicationdebug
logs for packagecom.howtodoinjava.demo
.aopLog
– Logs output toapplication-aop.log
. Includes applicationinfo
logs in packagecom.howtodoinjava.demo.aop
.springLog
– Createspring-framework.log
and contains all error logs generated by spring framework.hibernateLog
– Createdatabase.log
and contains all error logs generated by hibernate.
Put the given
logback.xml
in resources folder.
<configuration>
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %p %m%n" />
<property name="APP_LOG_ROOT" value="c:/temp"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<appender name="applicationLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${APP_LOG_ROOT}/application.log</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${APP_LOG_ROOT}/application-%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
</appender>
<appender name="aopLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${APP_LOG_ROOT}/application-aop.log</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${APP_LOG_ROOT}/application-aop-%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
</appender>
<appender name="springLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${APP_LOG_ROOT}/spring-framework.log</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${APP_LOG_ROOT}/spring-framework-%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
</appender>
<appender name="hibernateLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${APP_LOG_ROOT}/database.log</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${APP_LOG_ROOT}/database-%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
</appender>
<logger name="com.howtodoinjava.demo" level="DEBUG">
<appender-ref ref="applicationLog" />
<appender-ref ref="console" />
</logger>
<logger name="com.howtodoinjava.demo.aop" level="INFO">
<appender-ref ref="aopLog" />
<appender-ref ref="console" />
</logger>
<logger name="org.springframework" level="DEBUG">
<appender-ref ref="springLog" />
<appender-ref ref="console" />
</logger>
<logger name="org.hibernate" level="DEBUG">
<appender-ref ref="hibernateLog" />
<appender-ref ref="console" />
</logger>
<root level="info">
<appender-ref ref="console" />
</root>
</configuration>
2. Multiple log files with log4j2
To achieve the above logging configuration with log4j2, include log4j2 dependency in classpath.
<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>
Now add log4j2.xml in /resources folder.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="LOG_PATTERN">%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %p %m%n</Property>
<Property name="APP_LOG_ROOT">c:/temp</Property>
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
<RollingFile name="applicationLog" fileName="${sys:APP_LOG_ROOT}/application.log"
filePattern="${sys:APP_LOG_ROOT}/application-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<SizeBasedTriggeringPolicy size="19500KB" />
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
<RollingFile name="springLog" fileName="${sys:APP_LOG_ROOT}/spring-framework.log"
filePattern="${sys:APP_LOG_ROOT}/spring-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<SizeBasedTriggeringPolicy size="19500KB" />
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
<RollingFile name="aopLog" fileName="${sys:APP_LOG_ROOT}/application-aop.log"
filePattern="${sys:APP_LOG_ROOT}/application-aop-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<SizeBasedTriggeringPolicy size="19500KB" />
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
<RollingFile name="hibernateLog" fileName="${sys:APP_LOG_ROOT}/database.log"
filePattern="${sys:APP_LOG_ROOT}/spring-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<SizeBasedTriggeringPolicy size="19500KB" />
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.howtodoinjava.demo" additivity="false" level="debug">
<AppenderRef ref="applicationLog" />
<AppenderRef ref="console" />
</Logger>
<Logger name="com.howtodoinjava.demo.aop" additivity="false" level="info">
<AppenderRef ref="aopLog" />
<AppenderRef ref="console" />
</Logger>
<Logger name="org.springframework" additivity="false" level="error">
<AppenderRef ref="springLog" />
<AppenderRef ref="console"/>
</Logger>
<Logger name="org.hibernate" additivity="false" level="error">
<AppenderRef ref="hibernateLog" />
<AppenderRef ref="console"/>
</Logger>
<Root level="INFO">
<AppenderRef ref="console"/>
</Root>
</Loggers>
</Configuration>
3. Demo
Run the application with any of the given configurations above. You will see the log files generated in 'c:/temp'
folder.

Drop me your questions related to configuring spring boot logging with multiple file appenders.
Happy Learning !!
Comments