Class: Wukong::LogFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/wukong/logger.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(logger, config) ⇒ LogFactory

Returns a new instance of LogFactory.



24
25
26
27
28
# File 'lib/wukong/logger.rb', line 24

def initialize(logger, config)
  @created_log = logger.is_a?(Log4r::Logger) ? logger : Log4r::Logger.new(logger.to_s)
  outputter(LogFactory.default_outputter(logger)) unless ancestry_has_outputter?(@created_log)
  apply_options(config)
end

Instance Attribute Details

#created_logObject (readonly)

Returns the value of attribute created_log.



5
6
7
# File 'lib/wukong/logger.rb', line 5

def created_log
  @created_log
end

Class Method Details

.configure(klass, options = {}) ⇒ Object



19
20
21
22
# File 'lib/wukong/logger.rb', line 19

def self.configure(klass, options = {})
  factory = new(klass, options)
  factory.created_log
end

.default_formatter(klass) ⇒ Object



11
12
13
# File 'lib/wukong/logger.rb', line 11

def self.default_formatter klass
  Log4r::PatternFormatter.new(pattern: default_pattern(klass))
end

.default_outputter(klass) ⇒ Object



7
8
9
# File 'lib/wukong/logger.rb', line 7

def self.default_outputter klass
  Log4r::StderrOutputter.new('console', formatter: default_formatter(klass))
end

.default_pattern(klass) ⇒ Object



15
16
17
# File 'lib/wukong/logger.rb', line 15

def self.default_pattern klass
  "%l %d [%-20c] -- %m"
end

Instance Method Details

#ancestry_has_outputter?(lgr) ⇒ Boolean

Returns:

  • (Boolean)


30
31
32
33
34
35
36
37
38
# File 'lib/wukong/logger.rb', line 30

def ancestry_has_outputter? lgr
  if lgr.respond_to?(:outputters) && !lgr.outputters.empty?
    true
  elsif lgr.respond_to?(:parent) && !lgr.parent.nil?
    ancestry_has_outputter? lgr.parent
  else
    false        
  end
end

#apply_options(config) ⇒ Object



40
41
42
43
44
45
46
47
48
# File 'lib/wukong/logger.rb', line 40

def apply_options config
  config.each_pair do |option, value| 
    begin
      send(option, value)
    rescue
      raise Error.new("Error setting option <#{option}> to value <#{value}>")
    end
  end
end

#date_format(fmt) ⇒ Object



73
74
75
76
77
78
# File 'lib/wukong/logger.rb', line 73

def date_format fmt
  created_log.outputters.each do |output|
    keep_pattern = output.formatter.pattern
    output.formatter = Log4r::PatternFormatter.new(pattern: keep_pattern, date_format: fmt)
  end
end

#level(lvl) ⇒ Object



54
55
56
# File 'lib/wukong/logger.rb', line 54

def level lvl
  created_log.level = lookup_level(lvl.to_sym)
end

#lookup_level(lvl) ⇒ Object



58
59
60
61
62
63
64
# File 'lib/wukong/logger.rb', line 58

def lookup_level lvl
  { 
    debug: Log4r::DEBUG,
    info:  Log4r::INFO,
    warn:  Log4r::WARN
  }.fetch(lvl){ raise Error.new("Invalid log level: <#{lvl}>") }
end

#outputter(outptr) ⇒ Object



50
51
52
# File 'lib/wukong/logger.rb', line 50

def outputter outptr
  created_log.outputters = outptr
end

#pattern(ptrn) ⇒ Object



66
67
68
69
70
71
# File 'lib/wukong/logger.rb', line 66

def pattern ptrn
  created_log.outputters.each do |output|
    keep_date_format = output.formatter.date_pattern
    output.formatter = Log4r::PatternFormatter.new(pattern: ptrn, date_format: keep_date_format)
  end
end