[ 
http://jira.qos.ch/browse/LBCORE-26?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=11722#action_11722
 ] 

Ceki Gulcu commented on LBCORE-26:
----------------------------------

Hi Joe,

The behavior that you describe, that is RollingFileAppender and 
TimeBasedRollingPolicy rolling to the same file within the same period even 
after application restart, is absolutely correct. In other words, if the 
periodicity is one minute, if the application is restarted within the same 
minute, the expected and correct behavior is for the restarted application to 
log to the same file and rollover at the end of the said minute. 

You seem to require the restarted application to always log to a different file 
regardless of the current period but that is different than the subject of this 
issue. Please enter a *new* jira issue describing your requirements. 



> TimeBasedRollingPolicy append logs into a old log file, instead of rolling 
> the log file.
> ----------------------------------------------------------------------------------------
>
>                 Key: LBCORE-26
>                 URL: http://jira.qos.ch/browse/LBCORE-26
>             Project: logback-core
>          Issue Type: Bug
>          Components: Rolling
>    Affects Versions: unspecified
>         Environment: Operating System: All
> Platform: All
>            Reporter: Tsutomu YANO
>            Assignee: Ceki Gulcu
>            Priority: Critical
>             Fix For: 0.9.18
>
>
> If you use TimeBasedRollingPolicy to rollover a log file and no log wasn't 
> wrote into the log beyond the timing of rollover,  and if you restart your 
> application, the log file doesn't roll, then new log will be appended into 
> old log file.
> EVIDENCE:
> 1. in logback.xml, set your FileNamePattern like 
> 'log.%d{yyyy-MM-dd_HH-mm}.log'.
> 2. Simply do a kind of thing, which will make some logs into your log file.
> 3. Wait for some minutes.
> 4. restart your application.
> 5. do a kind of thing, which will make some logs into your log file.
> the FileNamePattern is 'log.%d{yyyy-MM-dd_HH-mm}.log', so the log file will 
> be roll every minutes. On case 5 of above example, the log file should be 
> roll over, because some minutes already have passed after last logs wrote 
> into the log file. But the file didn't be roll overed.
> THE CAUSE:
> In start() method of TimeBasedRollingPolicy, you initialize a variable 
> 'lastCheck' to System.currentTimeStamp().  So if you restart your 
> application, the last check time will be set to just NOW.
> you should initialize the variable to a last modified time of a current log 
> file.
> See below source code. from '//modified by Tsutomu YANO' to '//until here'.
> SOURCE:  
> public void start() {
>       // set the LR for our utility object
>       util.setContext(this.context);
>       compress.setContext(this.context);
>       // find out period from the filename pattern
>       if (fileNamePatternStr != null) {
>               fileNamePattern = new FileNamePattern(fileNamePatternStr, 
> this.context);
>               determineCompressionMode();
>       } else {
>               addWarn(FNP_NOT_SET);
>               addWarn(SEE_FNP_NOT_SET);
>               throw new IllegalStateException(FNP_NOT_SET + SEE_FNP_NOT_SET);
>       }
>       DateTokenConverter dtc = fileNamePattern.getDateTokenConverter();
>       if (dtc == null) {
>               throw new IllegalStateException("FileNamePattern [" + 
> fileNamePattern.getPattern() + "] does not contain a valid DateToken");
>       }
>       int len = fileNamePatternStr.length();
>       switch (compressionMode) {
>       case Compress.GZ:
>               activeFileNamePattern = new 
> FileNamePattern(fileNamePatternStr.substring(0, len - 3), this.context);
>               break;
>       case Compress.ZIP:
>               activeFileNamePattern = new 
> FileNamePattern(fileNamePatternStr.substring(0, len - 4), this.context);
>               break;
>       case Compress.NONE:
>               activeFileNamePattern = fileNamePattern;
>       }
>       addInfo("Will use the pattern " + activeFileNamePattern + " for the 
> active file");
>       rc = new RollingCalendar();
>       rc.init(dtc.getDatePattern());
>       addInfo("The date pattern is '" + dtc.getDatePattern() + "' from file 
> name pattern '" + fileNamePattern.getPattern() + "'.");
>       rc.printPeriodicity(this);
>       
>       //modified by Tsutomu YANO
>       //if a current log file exists, initialize a 'lastCheck' variable to 
> the 
>       //last modified date of the file.
>       File currentFile = new File(getParentFileName());
>       if(currentFile.exists() && currentFile.canRead()) {
>               lastCheck.setTime(currentFile.lastModified());
>       } else {
>               // currentTime = System.currentTimeMillis();
>               lastCheck.setTime(getCurrentTime());
>       }
>       //until here
>       
>       nextCheck = rc.getNextCheckMillis(lastCheck);
>       // Date nc = new Date();
>       // nc.setTime(nextCheck);
> }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        
_______________________________________________
logback-dev mailing list
[email protected]
http://qos.ch/mailman/listinfo/logback-dev

Reply via email to