Search code examples
javaspringspring-bootlogbackslf4j

Create log files for each date in separate directory with current system date


I am trying to save logs of my spring-boot application for each date in a different directory with the current date, month and year.

I have tried using timestamps it stores the logs in the separate directory only if we restart the tomcat server every day.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <logger name="org.hibernate" level="ERROR" />
    <logger name="org.mongodb" level="ERROR" />

    <property name="DIRECTORY" value="/home/Properties/logs" />

    <timestamp key="year" datePattern="yyyy" />
    <timestamp key="month" datePattern="MM" />
    <timestamp key="date" datePattern="dd" />
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.sss}][%-5p][%C][%t][%L]%m%n
            </pattern>
        </encoder>
    </appender>


<appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>${DIRECTORY}/${year}/${month}/${date}/logfile.log</file>
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.sss}][%-5p][%C][%t][%L]%m%n
            </pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="FILE" />
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

I want my logs for each date to be stored in a directory created every day without the need of restarting the server in the manner similar as [year]\[month]\[date]\logfile.log


Solution

  • Found solution to my own question, if any of you find a better solution please let me know.

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <property name="DIRECTORY" value="/home/Properties/logs" />
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>[%d{yyyy-MM-dd HH:mm:ss.sss}][%-5p][%C][%t][%L]%m%n
                </pattern>
            </encoder>
        </appender>
    
        <appender name="FILE"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${DIRECTORY}/logfile.log</file>
            <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!-- rollover daily -->
                <fileNamePattern>${DIRECTORY}/%d{yyyy/MM/dd, aux}/logfile-%d{yyyy-MM-dd}.%i.log
                </fileNamePattern>
                <maxFileSize>50MB</maxFileSize>
            </rollingPolicy>
            <encoder>
                <pattern>[%d{yyyy-MM-dd HH:mm:ss.sss}][%-5p][%C][%t][%L]%m%n
                </pattern>
            </encoder>
        </appender>
        <root level="info">
            <appender-ref ref="FILE" />
            <appender-ref ref="STDOUT" />
        </root>
    </configuration>