Bug #15977
closedUnobvious result value from #next_rotate_time and #previous_period_end methods of Logger::Period module
Description
I found that #next_rotate_time and #previous_period_end methods can return different time objects in some case.
When we call these methods with valid shift_age
option methods returns a new Time object with the local machine's timezone. If you put invalid shift_age
argument it will return existed time object with any timezone. Script for better understanding and reproducing:
require 'time'
require 'logger'
time = Time.parse("2019-07-18 13:52:02 -0300")
result = Logger::Period.next_rotate_time(time, 'daily')
invalid_arg_result = Logger::Period.next_rotate_time(time, 'invalid')
p result.zone == invalid_arg_result.zone
p result.zone
p invalid_arg_result.zone
In this case, result
object will have my local timezone and invalid_arg_result
will have -03
timezone.
I think that the problem in these lines:
https://github.com/ruby/ruby/blob/655b3da03ca31576d2318e674d71ff52b58c887a/lib/logger.rb#L635
and
https://github.com/ruby/ruby/blob/655b3da03ca31576d2318e674d71ff52b58c887a/lib/logger.rb#L654
The question is: is it good and if not what the way we can use to fix it?