Unobvious result value from #next_rotate_time and #previous_period_end methods of Logger::Period module
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
I think that the problem in these lines:
The question is: is it good and if not what the way we can use to fix it?
Updated by jeremyevans0 (Jeremy Evans) about 2 years ago
I've submitted a pull request that raises ArgumentError for invalid shift_age values: https://github.com/ruby/logger/pull/42
For backwards compatibility and to keep the tests passing, values of
'everytime' are considered valid and result in the behavior of rotating every time.