@@ -299,7 +299,7 @@ def computeRollover(self, currentTime):
299
299
300
300
r = rotate_ts - ((currentHour * 60 + currentMinute ) * 60 +
301
301
currentSecond )
302
- if r < 0 :
302
+ if r <= 0 :
303
303
# Rotate time is before the current time (for example when
304
304
# self.rotateAt is 13:45 and it now 14:15), rotation is
305
305
# tomorrow.
@@ -328,17 +328,18 @@ def computeRollover(self, currentTime):
328
328
daysToWait = self .dayOfWeek - day
329
329
else :
330
330
daysToWait = 6 - day + self .dayOfWeek + 1
331
- newRolloverAt = result + (daysToWait * (60 * 60 * 24 ))
332
- if not self .utc :
333
- dstNow = t [- 1 ]
334
- dstAtRollover = time .localtime (newRolloverAt )[- 1 ]
335
- if dstNow != dstAtRollover :
336
- if not dstNow : # DST kicks in before next rollover, so we need to deduct an hour
337
- addend = - 3600
338
- else : # DST bows out before next rollover, so we need to add an hour
339
- addend = 3600
340
- newRolloverAt += addend
341
- result = newRolloverAt
331
+ result += daysToWait * (60 * 60 * 24 )
332
+ if not self .utc :
333
+ dstNow = t [- 1 ]
334
+ dstAtRollover = time .localtime (result )[- 1 ]
335
+ if dstNow != dstAtRollover :
336
+ if not dstNow : # DST kicks in before next rollover, so we need to deduct an hour
337
+ addend = - 3600
338
+ if not time .localtime (result - 3600 )[- 1 ]:
339
+ addend = 0
340
+ else : # DST bows out before next rollover, so we need to add an hour
341
+ addend = 3600
342
+ result += addend
342
343
return result
343
344
344
345
def shouldRollover (self , record ):
@@ -415,17 +416,14 @@ def doRollover(self):
415
416
then we have to get a list of matching filenames, sort them and remove
416
417
the one with the oldest suffix.
417
418
"""
418
- if self .stream :
419
- self .stream .close ()
420
- self .stream = None
421
419
# get the time that this sequence started at and make it a TimeTuple
422
420
currentTime = int (time .time ())
423
- dstNow = time .localtime (currentTime )[- 1 ]
424
421
t = self .rolloverAt - self .interval
425
422
if self .utc :
426
423
timeTuple = time .gmtime (t )
427
424
else :
428
425
timeTuple = time .localtime (t )
426
+ dstNow = time .localtime (currentTime )[- 1 ]
429
427
dstThen = timeTuple [- 1 ]
430
428
if dstNow != dstThen :
431
429
if dstNow :
@@ -436,26 +434,19 @@ def doRollover(self):
436
434
dfn = self .rotation_filename (self .baseFilename + "." +
437
435
time .strftime (self .suffix , timeTuple ))
438
436
if os .path .exists (dfn ):
439
- os .remove (dfn )
437
+ # Already rolled over.
438
+ return
439
+
440
+ if self .stream :
441
+ self .stream .close ()
442
+ self .stream = None
440
443
self .rotate (self .baseFilename , dfn )
441
444
if self .backupCount > 0 :
442
445
for s in self .getFilesToDelete ():
443
446
os .remove (s )
444
447
if not self .delay :
445
448
self .stream = self ._open ()
446
- newRolloverAt = self .computeRollover (currentTime )
447
- while newRolloverAt <= currentTime :
448
- newRolloverAt = newRolloverAt + self .interval
449
- #If DST changes and midnight or weekly rollover, adjust for this.
450
- if (self .when == 'MIDNIGHT' or self .when .startswith ('W' )) and not self .utc :
451
- dstAtRollover = time .localtime (newRolloverAt )[- 1 ]
452
- if dstNow != dstAtRollover :
453
- if not dstNow : # DST kicks in before next rollover, so we need to deduct an hour
454
- addend = - 3600
455
- else : # DST bows out before next rollover, so we need to add an hour
456
- addend = 3600
457
- newRolloverAt += addend
458
- self .rolloverAt = newRolloverAt
449
+ self .rolloverAt = self .computeRollover (currentTime )
459
450
460
451
class WatchedFileHandler (logging .FileHandler ):
461
452
"""
0 commit comments