Adding child logger before initial parent results in unexpected level
electrofelix opened this issue · 1 comments
electrofelix commented
Defining a child logger before the initial parent will result in the child logger receiving a level of 0 instead of the default from the parent.
This means that developers need to be very careful about the load order of modules and classes or alternatively should provide a mechanism to easily reset child logger levels on defining of a parent logger.
At the very least, I'd suggest documenting the current behaviour more clearly to warn developers that order is important.
j4zzcat commented
I think this is a good testcase:
require 'log4r'
class Foo
module Logging
def Logging.included( klass )
Log4r::Logger.new klass.name
end
def logger
@logger ||= Log4r::Logger[ self.class.name.to_s ]
# Here @logger.level === 0...
@logger
end
end
# Dynamically define logging
class Bar
include Foo::Logging
def initialize
logger.info "Hello from #{self.class.name}"
end
end
def initialize
trouble = Log4r::Logger.new 'log4r'
trouble.add Log4r::Outputter.stdout
l = Log4r::Logger.new 'Foo'
l.add Log4r::Outputter.stdout
l.level = Log4r::INFO
l.info "Hello from #{self.class.name}"
end
end
f = Foo.new
b = Foo::Bar.new