km1
km1

Reputation: 2443

How to create rolling log file

I can't seem to get a rolling log file.

My logback.xml config has the following:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%date %level %thread %X{jobid} %logger{20}.%method\(%line\) %msg%n</pattern>
    </encoder>
</appender>

<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
    <discriminator>
        <key>logFileName</key>
        <defaultValue>unknown</defaultValue>
    </discriminator>
    <sift>
        <appender name="FILE-${logFileName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${catalina.base}/logs/${logFileName}.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${catalina.base}/logs/${logFileName}_%d{yyyy-MM-dd_HH-mm}.%i.log</fileNamePattern>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%date %level %thread %X{jobid} %logger{20}.%method\(%line\) %msg%n</pattern>
            </encoder>
        </appender>
    </sift>
</appender>


<root level="INFO">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="SIFT" />
</root>

Once Tomcat starts and loads the app I can see the log file "unknown.log". That's because I haven't set the logFileName in the code yet.

However, I do not see the rolling files. Even after waiting several minutes.

According to logback documentation the pattern "%d{yyyy-MM-dd_HH-mm}" should create a rolling time policy of every minute.

I am not seeing a new log file created.

Update:

I added the STDOUT appender. Now I see in catalina.out the logs.

Interesting. The entries in the "unknown.log" file from the SIFT stop at the stop of the minute. After that nothing is written to the SIFT file but I keep getting entries in catalina.out:

2015-12-09 16:31:22,269 INFO Thread1 RlQti5b0QYybZvRuHi/m c.l.l.w.Worker.consumeMessage(51) Rcvd: job.complete.
2015-12-09 16:31:49,654 INFO Thread1 mY0E7sV7QZyTRZAw9UwV c.l.l.w.Worker.consumeMessage(51) Rcvd: job.complete.
2015-12-09 16:31:51,812 INFO Thread1 WWjuyzH+RmCa35JcxRJy c.l.l.w.Worker.consumeMessage(51) Rcvd: job.complete.
2015-12-09 16:31:58,977 INFO Thread1 jUdqB1DaQ8KxajDFk6jN c.l.l.w.Worker.consumeMessage(51) Rcvd: job.complete.

Upvotes: 1

Views: 754

Answers (3)

nag
nag

Reputation: 11

try this

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <statusListener class="ch.qos.logback.core.status.NopStatusListener" />
    <property name="USER_HOME" value="\logs" />

    <appender name="FILE-THREAD" class="ch.qos.logback.classic.sift.SiftingAppender">

        <!-- This is MDC value -->
        <!-- We will assign a value to 'logFileName' via Java code -->
        <discriminator>
            <key>logFileName</key>
            <defaultValue>head0</defaultValue>
        </discriminator>

        <sift>

            <!-- A standard RollingFileAppender, the log file is based on 'logFileName' 
                at runtime -->
            <appender name="FILE-${logFileName}"
                class="ch.qos.logback.core.rolling.RollingFileAppender">
                <file>${USER_HOME}/${logFileName}.log</file>

                <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                    <Pattern>
                        %d{yyyy-MM-dd HH:mm:ss} %mdc [%thread] %level %logger{35}
                        - %msg%n
                    </Pattern>
                </encoder>

                <rollingPolicy
                    class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                    <FileNamePattern>${USER_HOME}/${logFileName}.%i.log.zip
                    </FileNamePattern>
                    <MinIndex>1</MinIndex>
                    <MaxIndex>10</MaxIndex>
                </rollingPolicy>

                <triggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                    <MaxFileSize>10MB</MaxFileSize>
                </triggeringPolicy>

            </appender>

        </sift>
    </appender>

Upvotes: 0

km1
km1

Reputation: 2443

Removing the %i from the fileNamePattern seems to fix the problem. I guess the index (%i) is only allowed for FixedWindowRollingPolicy.

Upvotes: 0

djechlin
djechlin

Reputation: 60768

Just a guess but - probably because you are not logging anything. They are "lazy" like that.

Upvotes: 0

Related Questions