1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[ruby/logger] Fix log rotation inter-process lock failed.

Issue only occurs in JRuby 9.3.0.0 and Windows and the full
console output is:

log rotation inter-process lock failed. D:\log.txt -> D:\log.txt.0: The process cannot access the file because it is being used by another process.
log writing failed. closed stream
log writing failed. closed stream
...

19fc734638
This commit is contained in:
Jesse Chavez 2022-01-26 14:05:21 -05:00 committed by git
parent d3d888b986
commit 99d02caed3
4 changed files with 5 additions and 3 deletions

View file

@ -11,6 +11,7 @@
# A simple system for logging messages. See Logger for more documentation. # A simple system for logging messages. See Logger for more documentation.
require 'monitor' require 'monitor'
require 'rbconfig'
require_relative 'logger/version' require_relative 'logger/version'
require_relative 'logger/formatter' require_relative 'logger/formatter'

View file

@ -135,7 +135,7 @@ class Logger
end end
end end
if /mswin|mingw|cygwin/ =~ RUBY_PLATFORM if /mswin|mingw|cygwin/ =~ RbConfig::CONFIG['host_os']
def lock_shift_log def lock_shift_log
yield yield
end end

View file

@ -435,6 +435,7 @@ class TestLogDevice < Test::Unit::TestCase
logdev1.write(message) logdev1.write(message)
assert_file.identical?(log, logdev1.dev) assert_file.identical?(log, logdev1.dev)
# NOTE: below assertion fails in JRuby 9.3 and TruffleRuby
assert_file.identical?(log + ".0", logdev2.dev) assert_file.identical?(log + ".0", logdev2.dev)
logdev2.write(message) logdev2.write(message)
@ -451,7 +452,7 @@ class TestLogDevice < Test::Unit::TestCase
end end
ensure ensure
logdev0.close logdev0.close
end unless /mswin|mingw|cygwin/ =~ RUBY_PLATFORM end unless /mswin|mingw|cygwin/ =~ RbConfig::CONFIG['host_os']
def test_shifting_midnight def test_shifting_midnight
Dir.mktmpdir do |tmpdir| Dir.mktmpdir do |tmpdir|

View file

@ -254,7 +254,7 @@ module Test
line ||= loc.lineno line ||= loc.lineno
end end
capture_stdout = true capture_stdout = true
unless /mswin|mingw/ =~ RUBY_PLATFORM unless /mswin|mingw/ =~ RbConfig::CONFIG['host_os']
capture_stdout = false capture_stdout = false
opt[:out] = Test::Unit::Runner.output if defined?(Test::Unit::Runner) opt[:out] = Test::Unit::Runner.output if defined?(Test::Unit::Runner)
res_p, res_c = IO.pipe res_p, res_c = IO.pipe