class Log4r::Logger
See log4r/logger.rb
Attributes
Public Class Methods
Get a logger with a fullname from the repository or nil if logger wasn’t found.
# File lib/log4r/staticlogger.rb, line 12 def self.[](_fullname) # forces creation of RootLogger if it doesn't exist yet. return RootLogger.instance if _fullname=='root' or _fullname=='global' Repository[_fullname] end
Yields fullname and logger for every logger in the system.
# File lib/log4r/staticlogger.rb, line 29 def self.each for fullname, logger in Repository.instance.loggers yield fullname, logger end end
# File lib/log4r/staticlogger.rb, line 35 def self.each_logger Repository.instance.loggers.each_value {|logger| yield logger} end
Like Logger[] except that it raises NameError if Logger
wasn’t found.
# File lib/log4r/staticlogger.rb, line 20 def self.get(_fullname) logger = self[_fullname] if logger.nil? raise NameError, "Logger '#{_fullname}' not found.", caller end logger end
Returns the root logger. Identical to Logger.root
# File lib/log4r/staticlogger.rb, line 7 def self.global; return root end
Internal logging for Log4r
components. Accepts only blocks. To see such log events, create a logger named ‘log4r’ and give it an outputter.
# File lib/log4r/staticlogger.rb, line 43 def self.log_internal(level=1) internal = Logger['log4r'] return if internal.nil? internal.send(LNAMES[level].downcase, yield) end
Logger
requires a name. The last 3 parameters are:
- level
-
Do I have a level? (Otherwise, I’ll inherit my parent’s)
- additive
-
Am I additive?
- trace
-
Do I record the execution trace? (slows things a wee bit)
# File lib/log4r/logger.rb, line 26 def initialize(_fullname, _level=nil, _additive=true, _trace=false) # validation raise ArgumentError, "Logger must have a name", caller if _fullname.nil? Log4rTools.validate_level(_level) unless _level.nil? validate_name(_fullname) # create the logger @fullname = _fullname @outputters = [] @additive = _additive deal_with_inheritance(_level) LoggerFactory.define_methods(self) self.trace = _trace Repository[@fullname] = self end
Returns the root logger. Identical to Logger.global
# File lib/log4r/staticlogger.rb, line 5 def self.root; return RootLogger.instance end
Public Instance Methods
# File lib/log4r/logger.rb, line 145 def ==(other) return true if self.object_id == other.object_id end
Add outputters by name or by reference. Can be done any time.
# File lib/log4r/logger.rb, line 119 def add(*_outputters) for thing in _outputters o = (thing.kind_of?(Outputter) ? thing : Outputter[thing]) # some basic validation if not o.kind_of?(Outputter) raise TypeError, "Expected kind of Outputter, got #{o.class}", caller elsif o.nil? raise TypeError, "Couldn't find Outputter '#{thing}'", caller end @outputters.push o Logger.log_internal {"Added outputter '#{o.name}' to '#{@fullname}'"} end @outputters end
Set the additivity of the logger dynamically. True or false.
# File lib/log4r/logger.rb, line 87 def additive=(_additive) @additive = _additive LoggerFactory.define_methods(self) Logger.log_internal {"Logger '#{@fullname}' is additive"} @additive end
# File lib/log4r/logger.rb, line 143 def is_root?; false end
Set the logger level dynamically. Does not affect children.
# File lib/log4r/logger.rb, line 73 def level=(_level) Log4rTools.validate_level(_level) @level = _level LoggerFactory.define_methods(self) Logger.log_internal {"Logger '#{@fullname}' set to #{LNAMES[@level]}"} @level end
Return array of defined levels.
# File lib/log4r/logger.rb, line 82 def levels LNAMES end
Set the Outputters dynamically by name or reference. Can be done any time.
# File lib/log4r/logger.rb, line 113 def outputters=(_outputters) @outputters.clear add(*_outputters) end
Please don’t reset the parent
# File lib/log4r/logger.rb, line 107 def parent=(parent) @parent = parent end
Remove outputters from this logger by name only. Can be done any time.
# File lib/log4r/logger.rb, line 135 def remove(*_outputters) for name in _outputters o = Outputter[name] @outputters.delete o Logger.log_internal {"Removed outputter '#{o.name}' from '#{@fullname}'"} end end
Set whether the logger traces. Can be set dynamically. Defaults to false and understands the strings ‘true’ and ‘false’.
# File lib/log4r/logger.rb, line 96 def trace=(_trace) @trace = case _trace when "true", true then true else false end LoggerFactory.define_methods(self) Logger.log_internal {"Logger '#{@fullname}' is tracing"} if @trace @trace end
Private Instance Methods
Parses name for location in heiarchy, sets the parent, and deals with level inheritance
# File lib/log4r/logger.rb, line 53 def deal_with_inheritance(_level) mypath = @fullname.split Log4rConfig::LoggerPathDelimiter @name = mypath.pop if mypath.empty? # then root is my daddy @path = "" # This is one of the guarantees that RootLogger gets created @parent = Logger.root else @path = mypath.join(Log4rConfig::LoggerPathDelimiter) @parent = Repository.find_ancestor(@path) @parent = Logger.root if @parent.nil? end # inherit the level if no level defined if _level.nil? then @level = @parent.level else @level = _level end Repository.reassign_any_children(self) end
# File lib/log4r/logger.rb, line 42 def validate_name(_fullname) parts = _fullname.split Log4rConfig::LoggerPathDelimiter for part in parts raise ArgumentError, "Malformed path", caller[1..-1] if part.empty? end end