[logback-user] RollingFileAppender with Prudent Flag

Ceki Gulcu ceki at qos.ch
Tue Aug 11 21:08:51 CEST 2009


By the way, you've got some configuration there. SiftingAppender plus
RollingFileAppender in prudent mode, that has me impressed.

Thomas.Guenter1 at swisscom.com wrote:
> Hi Ceki,
> 
> thanks for your answer in detail and sorry for missing the section in the documentation. I see your points and will look for alternatives.
> 
> Regards,
> tom
> 
> -----Original Message-----
> From: logback-user-bounces at qos.ch [mailto:logback-user-bounces at qos.ch] On Behalf Of Ceki Gulcu
> Sent: Tuesday, August 11, 2009 12:32 PM
> To: logback users list
> Subject: Re: [logback-user] RollingFileAppender with Prudent Flag
> 
> 
> Setting the File property to a non-null value implies that during rollover that file would need to be renamed and moved. However, when multiple processes have a file descriptor open (which is the intention in prudent mode), most operating systems won't allow moving of the file, hence the File=null restriction.
> 
> Ceki Gulcu wrote:
>> Hello Thomas,
>>
>> The File property of RollingFileAppender cannot be set in prudent 
>> mode. This is documented in [1] (see the table describing the 
>> properties of RollingFileAppender). Moreover, the application of this 
>> restriction should have been reported via logback's status messages. 
>> The restriction is justified by technical reasons which somehow I can 
>> no longer recall. Let me reconsider the issue and come back to you.
>>
>> [1] http://logback.qos.ch/manual/appenders.html#RollingFileAppender
>>
>> Thomas.Guenter1 at swisscom.com wrote:
>>> Hi,
>>>
>>> we're using logback and the RollingFileAppender to write log files 
>>> from several webservice to a /logs directory and automatically move 
>>> "old" files into a /logs/archive directory based on a 
>>> TimeBasedRollingPolicy. This works great with the following
>>> configuration:
>>>
>>>     <appender name="SERVICE_CALL_SIFT" 
>>> class="ch.qos.logback.classic.sift.SiftingAppender">
>>>         <discriminator
>>> class="com.myproject.logback.ContextEnvironmentPartBasedDiscriminator">
>>>             <DefaultValue>unknown</DefaultValue>
>>>         </discriminator>
>>>         <sift>
>>>             <appender name="FILE-AUDIT-${environmentName}" 
>>> class="ch.qos.logback.core.rolling.RollingFileAppender">
>>>                 
>>> <File>${LOG_DIR}/service_call_${environmentName}.log</File>
>>>                 <rollingPolicy
>>> class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
>>>                     <!-- Rollover at midnight. Put log as 
>>> uncompressed file to archive.  -->
>>>                     
>>> <FileNamePattern>${LOG_DIR}/archive/service_call_${environmentName}_%
>>> d{yyyy-MM-dd}.log</FileNamePattern>
>>>
>>>                     <!-- Keep 5 days worth of history -->
>>>                     <MaxHistory>${MAX_HISTORY_DAYS}</MaxHistory>
>>>                 </rollingPolicy>
>>>
>>>                 <layout class="ch.qos.logback.classic.PatternLayout">
>>>                     <Pattern>%d{HH:mm:ss.SSS} [%contextName] refId: 
>>> %mdc{refId}, %msg%n</Pattern>
>>>                 </layout>
>>>             </appender>
>>>         </sift>
>>>     </appender>
>>>
>>> But since some of the log files are shared between different 
>>> applications, I discovered some strange effects (one of the 
>>> applications stopped writing into one of the log-files) and read 
>>> about the prudent flag. Now, I tried to switch on the prudent mode 
>>> using the following configuration:
>>>
>>>     <appender name="SERVICE_CALL_SIFT" 
>>> class="ch.qos.logback.classic.sift.SiftingAppender">
>>>         <discriminator
>>> class="com.myproject.logback.ContextEnvironmentPartBasedDiscriminator">
>>>             <DefaultValue>unknown</DefaultValue>
>>>         </discriminator>
>>>         <sift>
>>>             <appender name="FILE-AUDIT-${environmentName}" 
>>> class="ch.qos.logback.core.rolling.RollingFileAppender">
>>>                 
>>> <File>${LOG_DIR}/service_call_${environmentName}.log</File>
>>>                 <!-- Ensure safe writing to one log file from 
>>> different contexts by setting prudent to true -->
>>>                 <Prudent>true</Prudent>                 <rollingPolicy 
>>> class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
>>>                     <!-- Rollover at midnight. Put log as 
>>> uncompressed file to archive.  -->
>>>                     
>>> <FileNamePattern>${LOG_DIR}/archive/service_call_${environmentName}_%
>>> d{yyyy-MM-dd}.log</FileNamePattern>
>>>
>>>                     <!-- Keep 5 days worth of history -->
>>>                     <MaxHistory>${MAX_HISTORY_DAYS}</MaxHistory>
>>>                 </rollingPolicy>
>>>
>>>                 <layout class="ch.qos.logback.classic.PatternLayout">
>>>                     <Pattern>%d{HH:mm:ss.SSS} [%contextName] refId: 
>>> %mdc{refId}, %msg%n</Pattern>
>>>                 </layout>
>>>             </appender>
>>>         </sift>
>>>     </appender>
>>>
>>> This way, the node /appender/sift/appender/File isn't used anymore 
>>> and the logger directly writes into the archive file specified under 
>>> /appender/sift/appender/rollingPolicy/FileNamePattern.
>>>
>>> Is there a way of using the prudent mode but still separating the log 
>>> from the archive files?
>>>
>>> Thanks for your help!
>>> tom
> 
> --
> Ceki Gülcü
> Logback: The reliable, generic, fast and flexible logging framework for Java.
> http://logback.qos.ch
> _______________________________________________
> Logback-user mailing list
> Logback-user at qos.ch
> http://qos.ch/mailman/listinfo/logback-user
> _______________________________________________
> Logback-user mailing list
> Logback-user at qos.ch
> http://qos.ch/mailman/listinfo/logback-user
> 

-- 
Ceki Gülcü
Logback: The reliable, generic, fast and flexible logging framework for Java.
http://logback.qos.ch


More information about the Logback-user mailing list