@@ -5654,46 +5654,22 @@ def test_rollover(self):
56545654print (tf .read ())
56555655self .assertTrue (found ,msg = msg )
56565656
5657- def test_rollover_at_midnight (self ):
5658- atTime = datetime .datetime .now ().time ()
5659- fmt = logging .Formatter ('%(asctime)s %(message)s' )
5660- for i in range (3 ):
5661- fh = logging .handlers .TimedRotatingFileHandler (
5662- self .fn ,encoding = "utf-8" ,when = 'MIDNIGHT' ,atTime = atTime )
5663- fh .setFormatter (fmt )
5664- r2 = logging .makeLogRecord ({'msg' :f'testing1{ i } ' })
5665- fh .emit (r2 )
5666- fh .close ()
5667- self .assertLogFile (self .fn )
5668- with open (self .fn ,encoding = "utf-8" )as f :
5669- for i ,line in enumerate (f ):
5670- self .assertIn (f'testing1{ i } ' ,line )
5671-
5672- os .utime (self .fn , (time .time ()- 1 ,)* 2 )
5673- for i in range (2 ):
5674- fh = logging .handlers .TimedRotatingFileHandler (
5675- self .fn ,encoding = "utf-8" ,when = 'MIDNIGHT' ,atTime = atTime )
5676- fh .setFormatter (fmt )
5677- r2 = logging .makeLogRecord ({'msg' :f'testing2{ i } ' })
5678- fh .emit (r2 )
5679- fh .close ()
5680- rolloverDate = datetime .datetime .now ()- datetime .timedelta (days = 1 )
5681- otherfn = f'{ self .fn } .{ rolloverDate :%Y-%m-%d} '
5682- self .assertLogFile (otherfn )
5683- with open (self .fn ,encoding = "utf-8" )as f :
5684- for i ,line in enumerate (f ):
5685- self .assertIn (f'testing2{ i } ' ,line )
5686- with open (otherfn ,encoding = "utf-8" )as f :
5687- for i ,line in enumerate (f ):
5688- self .assertIn (f'testing1{ i } ' ,line )
5689-
5690- def test_rollover_at_weekday (self ):
5657+ def test_rollover_at_midnight (self ,weekly = False ):
5658+ os_helper .unlink (self .fn )
56915659now = datetime .datetime .now ()
56925660atTime = now .time ()
5661+ if not 0.1 < atTime .microsecond / 1e6 < 0.9 :
5662+ # The test requires all records to be emitted within
5663+ # the range of the same whole second.
5664+ time .sleep ((0.1 - atTime .microsecond / 1e6 )% 1.0 )
5665+ now = datetime .datetime .now ()
5666+ atTime = now .time ()
5667+ atTime = atTime .replace (microsecond = 0 )
56935668fmt = logging .Formatter ('%(asctime)s %(message)s' )
5669+ when = f'W{ now .weekday ()} ' if weekly else 'MIDNIGHT'
56945670for i in range (3 ):
56955671fh = logging .handlers .TimedRotatingFileHandler (
5696- self .fn ,encoding = "utf-8" ,when = f'W { now . weekday () } ' ,atTime = atTime )
5672+ self .fn ,encoding = "utf-8" ,when = when ,atTime = atTime )
56975673fh .setFormatter (fmt )
56985674r2 = logging .makeLogRecord ({'msg' :f'testing1{ i } ' })
56995675fh .emit (r2 )
@@ -5703,15 +5679,15 @@ def test_rollover_at_weekday(self):
57035679for i ,line in enumerate (f ):
57045680self .assertIn (f'testing1{ i } ' ,line )
57055681
5706- os .utime (self .fn , (time . time ()- 1 ,)* 2 )
5682+ os .utime (self .fn , (now . timestamp ()- 1 ,)* 2 )
57075683for i in range (2 ):
57085684fh = logging .handlers .TimedRotatingFileHandler (
5709- self .fn ,encoding = "utf-8" ,when = f'W { now . weekday () } ' ,atTime = atTime )
5685+ self .fn ,encoding = "utf-8" ,when = when ,atTime = atTime )
57105686fh .setFormatter (fmt )
57115687r2 = logging .makeLogRecord ({'msg' :f'testing2{ i } ' })
57125688fh .emit (r2 )
57135689fh .close ()
5714- rolloverDate = datetime . datetime . now () - datetime .timedelta (days = 7 )
5690+ rolloverDate = now - datetime .timedelta (days = 7 if weekly else 1 )
57155691otherfn = f'{ self .fn } .{ rolloverDate :%Y-%m-%d} '
57165692self .assertLogFile (otherfn )
57175693with open (self .fn ,encoding = "utf-8" )as f :
@@ -5721,6 +5697,9 @@ def test_rollover_at_weekday(self):
57215697for i ,line in enumerate (f ):
57225698self .assertIn (f'testing1{ i } ' ,line )
57235699
5700+ def test_rollover_at_weekday (self ):
5701+ self .test_rollover_at_midnight (weekly = True )
5702+
57245703def test_invalid (self ):
57255704assertRaises = self .assertRaises
57265705assertRaises (ValueError ,logging .handlers .TimedRotatingFileHandler ,