class Log4r::Configurator

See log4r/configurator.rb

Constants

ExcludeParams

Public Class Methods

[](param) click to toggle source

Get a parameter's value

# File lib/log4r/configurator.rb, line 25
def self.[](param); @@params[param] end
[]=(param, value) click to toggle source

Define a parameter with a value

# File lib/log4r/configurator.rb, line 27
def self.[]=(param, value); @@params[param] = value end
custom_levels(*levels) click to toggle source

Sets the custom levels. This method accepts symbols or strings.

Configurator.custom_levels('My', 'Custom', :Levels)

Alternatively, you can specify custom levels in XML:

<log4r_config>
  <pre_config>
    <custom_levels>
      My, Custom, Levels
    </custom_levels>
    ...
# File lib/log4r/configurator.rb, line 42
def self.custom_levels(*levels)
  return Logger.root if levels.size == 0
  for i in 0...levels.size
    name = levels[i].to_s
    if name =~ /\s/ or name !~ /^[A-Z]/
      raise TypeError, "#{name} is not a valid Ruby Constant name", caller
    end
  end
  Log4r.define_levels *levels
end
load_xml_file(filename) click to toggle source

Given a filename, loads the XML configuration for Log4r.

# File lib/log4r/configurator.rb, line 54
def self.load_xml_file(filename)
  detect_rexml
  actual_load Document.new(File.new(filename))
end
load_xml_string(string) click to toggle source

You can load a String XML configuration instead of a file.

# File lib/log4r/configurator.rb, line 60
def self.load_xml_string(string)
  detect_rexml
  actual_load Document.new(string)
end

Private Class Methods

actual_load(doc) click to toggle source
# File lib/log4r/configurator.rb, line 76
def self.actual_load(doc)
  confignode = doc.elements['//log4r_config']
  if confignode.nil?
    raise ConfigError, 
    "<log4r_config> element not defined", caller[1..-1]
  end
  decode_xml(confignode)
end
decode_custom_levels(e) click to toggle source
# File lib/log4r/configurator.rb, line 101
def self.decode_custom_levels(e)
  return Logger.root if e.nil? or e.text.nil?
  begin custom_levels *Log4rTools.comma_split(e.text)
  rescue TypeError => te
    raise ConfigError, te.message, caller[1..-4]
  end
end
decode_formatter(e) click to toggle source
# File lib/log4r/configurator.rb, line 160
def self.decode_formatter(e)
  return nil if e.nil?
  type = e.value_of 'type' 
  raise ConfigError, "Formatter missing type", caller[1..-4] if type.nil?
  buff = "#{type}.new " + decode_hash_params(e).join(',')
  begin return eval(buff)
  rescue Exception => ae
    raise ConfigError,
    "Problem creating outputter: #{ae.message}", caller[1..-4]
  end
end
decode_hash_params(e) click to toggle source

Does the fancy parameter to hash argument transformation

# File lib/log4r/configurator.rb, line 175
def self.decode_hash_params(e)
  buff = []
  e.attributes.each_attribute {|p| 
    next if ExcludeParams.include? p.name
    buff << ":" + p.name + "=>" + paramsub(p.value)
  }
  e.elements.each {|p| 
    next if ExcludeParams.include? p.name
    buff << ":" + p.name + "=>" + paramsub(p.text)
  }
  buff
end
decode_logger(e) click to toggle source
# File lib/log4r/configurator.rb, line 195
def self.decode_logger(e)
  l = Logger.new e.value_of('name')
  decode_logger_common(l, e)
end
decode_logger_common(l, e) click to toggle source
# File lib/log4r/configurator.rb, line 208
def self.decode_logger_common(l, e)
  level = e.value_of 'level'
  additive = e.value_of 'additive'
  trace = e.value_of 'trace'
  l.level = LNAMES.index(level) unless level.nil?
  l.additive = additive unless additive.nil?
  l.trace = trace unless trace.nil?
  # and now for outputters
  outs = e.value_of 'outputters'
  Log4rTools.comma_split(outs).each {|n| l.add n.strip} unless outs.nil?
  e.elements.each('outputter') {|e|
    name = (e.value_of 'name' or e.text)
    l.add Outputter[name]
  }
end
decode_logserver(e) click to toggle source
# File lib/log4r/configurator.rb, line 200
def self.decode_logserver(e)
  return unless HAVE_REXML
  name = e.value_of 'name'
  uri = e.value_of 'uri'
  l = LogServer.new name, uri
  decode_logger_common(l, e)
end
decode_outputter(e) click to toggle source
# File lib/log4r/configurator.rb, line 126
def self.decode_outputter(e)
  # fields
  name = e.value_of 'name'
  type = e.value_of 'type'
  level = e.value_of 'level'
  only_at = e.value_of 'only_at'
  # validation
  raise ConfigError, "Outputter missing name", caller[1..-3] if name.nil?
  raise ConfigError, "Outputter missing type", caller[1..-3] if type.nil?
  Log4rTools.validate_level(LNAMES.index(level)) unless level.nil?
  only_levels = []
  unless only_at.nil?
    for lev in Log4rTools.comma_split(only_at)
      alev = LNAMES.index(lev)
      Log4rTools.validate_level(alev, 3)
      only_levels.push alev
    end
  end
  formatter = decode_formatter(e.elements['formatter'])
  # build the eval string
  buff = "Outputter[name] = #{type}.new name"
  buff += ",:level=>#{LNAMES.index(level)}" unless level.nil?
  buff += ",:formatter=>formatter" unless formatter.nil?
  params = decode_hash_params(e)
  buff += "," + params.join(',') if params.size > 0
  begin eval buff
  rescue Exception => ae
    raise ConfigError, 
    "Problem creating outputter: #{ae.message}", caller[1..-3]
  end
  Outputter[name].only_at *only_levels if only_levels.size > 0
  Outputter[name]
end
decode_parameter(e) click to toggle source
# File lib/log4r/configurator.rb, line 122
def self.decode_parameter(e)
  @@params[e.value_of('name')] = e.value_of 'value'
end
decode_parameters(e) click to toggle source
# File lib/log4r/configurator.rb, line 118
def self.decode_parameters(e)
  e.elements.each{|p| @@params[p.name] = p.text} unless e.nil?
end
decode_pre_config(e) click to toggle source
# File lib/log4r/configurator.rb, line 92
def self.decode_pre_config(e)
  return Logger.root if e.nil?
  decode_custom_levels(e.elements['custom_levels'])
  global_config(e.elements['global'])
  global_config(e.elements['root'])
  decode_parameters(e.elements['parameters'])
  e.elements.each('parameter') {|p| decode_parameter(p)}
end
decode_xml(doc) click to toggle source
# File lib/log4r/configurator.rb, line 85
def self.decode_xml(doc)
  decode_pre_config(doc.elements['pre_config'])
  doc.elements.each('outputter') {|e| decode_outputter(e)}
  doc.elements.each('logger') {|e| decode_logger(e)}
  doc.elements.each('logserver') {|e| decode_logserver(e)}
end
detect_rexml() click to toggle source
# File lib/log4r/configurator.rb, line 69
def self.detect_rexml
  unless HAVE_REXML
    raise LoadError,
    "Need REXML to load XML configuration", caller[1..-1]
  end
end
global_config(e) click to toggle source
# File lib/log4r/configurator.rb, line 109
def self.global_config(e)
  return if e.nil?
  globlev = e.value_of 'level'
  return if globlev.nil?
  lev = LNAMES.index(globlev)     # find value in LNAMES
  Log4rTools.validate_level(lev, 4)  # choke on bad level
  Logger.global.level = lev
end
paramsub(str) click to toggle source

Substitues any #{foo} in the XML with Parameter

# File lib/log4r/configurator.rb, line 189
def self.paramsub(str)
  return nil if str.nil?
  @@params.each {|param, value| str.sub! '#{'+param+'}', value}
  "'" + str + "'"
end