Without binmode strings with incompatible encoding can't be written in
the file. This is very common in applications that log user provided
parameters.
We need to allow changing the binnary mode because right now it is impossible to use
the built-in log rotation feature when you provide a File object to the
LogDevice, and if you provide a filename you can't have binmode.
https://github.com/ruby/logger/commit/9114b3ac7e
Saves a few hundred bytes of bytecode in a frequently loaded module.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61894 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Because progname was memoized with ||= a logger call that involved
outputting false would be nil. Example code:
logger = Logger.new(STDOUT)
logger.info(false) # => nil
Perform an explicit nil check instead of ||= so that false will be output.
patched by Gavin Miller <gavingmiller@gmail.com> [Fix GH-1667]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59380 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Strings in "when" statements are allocation-free, so there's
never any reason to uglify the code to use opt_str_freeze over
the normal putobject instructions, here.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58076 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/logger.rb (Logger::LogDevice#initialize): calculate next
rotate time based on the mtime of the last existing file.
[ruby-dev:49881] [Bug #12948]
Author: Tsukasa Oishi <tsukasa.oishi@gmail.com>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56815 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/logger.rb (Logger::Period#next_rotate_time): fix monthly log
rotate when DST is applied during a month of 31 days.
[Fix GH-1458]
With DST the month of october can actually last more than 31 days.
It can last 31 days plus 1 hour. So during october, `t` used to be
equal to "2016-10-31 23:00:00" instead of "2016-11-01 00:00:00".
This was then normalized to "2016-10-01 00:00:00" which lead every
single line of log during october to rotate the log file.
This fix ensure that next_rotate_time(now, 'monthly') always return
the first day of next month in every situation.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56374 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
`LogDevice#initialize` treats shift_age: nil as 7, but
Logger#initialize has the default value of shift_age as 0.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56328 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
When you change this to true, you may need to add more tests.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/logger.rb (Logger::Period#previous_period_end): as weekly
rotation shifts the log file on Sundays, the end date of the
previous period should be Saturdays. fix r45072.
[ruby-dev:49314] [Bug #11622]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52297 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/logger.rb (Logger::Period#next_rotate_time): get rid of
adding to mday not to exceed the days of the month.
[ruby-core:71185] [Bug #11620]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52293 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/logger.rb (format_datetime): simplify and freeze the default
format so that it can be shared.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47272 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/logger.rb (format_datetime): use "%6N" to show microsecond.
[Fix GH-704]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47271 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/logger.rb (Logger::LogDevice#check_shift_log): compare the
current time with the time for the next rotation to fix rotation
miss when date changed between the comparison and log writing.
based on the patch by megayu <yuhg2310 AT gmail.com>.
[Fixes GH-539]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45071 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/logger.rb (lock_shift_log): no need to rotate the log file
if it has been rotated by another process. based on the patch
by no6v (Nobuhiro IMAI) in [ruby-core:58620]. [Bug #9133]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44203 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/logger.rb (Logger::LogDevice::LogDeviceMutex#lock_shift_log):
open file can't be removed or renamed on Windows. [ruby-dev:47790]
[Bug #9046]
* test/logger/test_logger.rb (TestLogDevice#run_children): don't use
fork.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43513 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Current implementation fails log rotation on multi process env.
by sonots <sonots@gmail.com>
https://github.com/ruby/ruby/pull/428 fix GH-428 [Bug #9046]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43511 b2dd03c8-39d4-4d8f-98ff-823fe69b080e