Development Environment Logging Setup
<property name="LOG_PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n" />
<springProfile name="development">
<appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<logger name="com.yourcompany.packagename" level="debug"/>
<root level="info">
</root>
</springProfile>
Testing Environment Configuration
<property name="TEST_LOG_PATH" value="/var/log/application/test/" />
<springProfile name="testing">
<appender name="TEST_FILE_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${TEST_LOG_PATH}/application_info.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${TEST_LOG_PATH}/archive.%d{yyyy-MM-dd_HH-mm}.log</fileNamePattern>
<MaxHistory>100</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_PATTERN}</pattern>
</layout>
</appender>
<appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<logger name="com.yourcompany.packagename" level="debug"/>
<root level="info">
</root>
</springProfile>
Complete Configuration File
<configuration>
<property name="LOG_PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n" />
<property name="TEST_LOG_PATH" value="/var/log/application/test/" />
<property name="PROD_LOG_PATH" value="/var/log/application/production/" />
<springProfile name="development">
<appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<logger name="com.yourcompany.packagename" level="debug"/>
<root level="info">
</root>
</springProfile>
<springProfile name="testing">
<appender name="TEST_FILE_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${TEST_LOG_PATH}/application_info.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${TEST_LOG_PATH}/archive.%d{yyyy-MM-dd_HH-mm}.log</fileNamePattern>
<MaxHistory>100</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_PATTERN}</pattern>
</layout>
</appender>
<appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<logger name="com.yourcompany.packagename" level="debug"/>
<root level="info">
</root>
</springProfile>
<springProfile name="production">
<appender name="PROD_FILE_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${PROD_LOG_PATH}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${PROD_LOG_PATH}/warnings.%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>100</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_PATTERN}</pattern>
</layout>
</appender>
<root level="warn">
</root>
</springProfile>
</configuration>
Required Maven Dependencies
The configuration utilizes several classes from the Logback framework:
- ConsoleAppender:
ch.qos.logback.core.ConsoleAppender- Outputs logs to the console - RollingFileAppender:
ch.qos.logback.core.rolling.RollingFileAppender- Outputs logs to files with rolling capabilities - TimeBasedRollingPolicy:
ch.qos.logback.core.rolling.TimeBasedRollingPolicy- Handles log file rotation based on time
These classes are part of the logback-core.jar library. In a Spring Boot application, you typically need to add the web starter dependency which includes logging support:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>