Skip to content

Logger: log rotation inter-process lock failed. on Windows with JRuby 9.x #4147

@smk0621

Description

@smk0621

Environment

Provide at least:

  • jruby 9.1.2.0 (2.3.0) 2016-05-26 7357c8f Java HotSpot(TM) 64-Bit Server VM 25.102-b14 on 1.8.0_102-b14 +jit [mswin32-x86_64]
  • Windows 10 + Oracle Java SE JDK 1.8.0_102

Test Codes

  require 'logger'
  logger = Logger.new("C:\\log.txt", 5, 1024)
  150.times do |i|
    logger.info i
  end

Expected Behavior

  • Create "log.txt", "log.txt.0", "log.txt.1", "log.txt.2", "log.txt.3" files.

Actual Behavior

  • Raise error:
  log rotation inter-process lock failed. Permission denied - C:\log.txt or C:\log.txt.0
  log writing failed. closed stream
  log shifting failed. closed stream
  ...

We test it in JRuby1.6.8, JRuby1.7.22 and Ruby 2.3.1,
they are correct.

And we find the source codes in jruby-9.1.2.0\lib\ruby\stdlib\logger.rb line 745

  if /mswin|mingw/ =~ RUBY_PLATFORM
    def lock_shift_log
      yield
    end
  else
    ...
  end

For Ruby, the value of RUBY_PLATFORM likes "x64-mingw32".
But for JRuby, the value of RUBY_PLATFORM is "java".

For test, we change
if /mswin|mingw/ =~ RUBY_PLATFORM
to
if /mswin|mingw|java/ =~ RUBY_PLATFORM
it is correct too.

So, is this a JRuby bug?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions