
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@qos.ch [mailto:logback-user-bounces@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@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@qos.ch http://qos.ch/mailman/listinfo/logback-user