class Gallus::Log

Attributes

level[RW]
name[RW]
output[R]
serialization[RW]

Public Class Methods

[](name) click to toggle source
# File lib/gallus/log.rb, line 11
def [](name)
  configure(name)
end
configure(name = '', &block) click to toggle source
# File lib/gallus/log.rb, line 7
def configure(name = '', &block)
  Repository.get_or_create_logger(name, &block)
end
current_thread_context() { |current ||= {}| ... } click to toggle source
# File lib/gallus/log.rb, line 40
def current_thread_context
  yield (Thread.current[:log_context] ||= {})
end
define_log_methods!(log_level) click to toggle source
# File lib/gallus/log.rb, line 19
def define_log_methods!(log_level)
  Level.each do |level|
    method_name = level.name.downcase
    remove_method(method_name) if method_defined?(method_name)

    if level >= log_level
      define_method(method_name) do |message, payload = {}|
        log(level, message, payload)
      end
    else
      define_method(method_name) do |message, payload = {}|
        # supressed...
      end
    end
  end
end
delete(name) click to toggle source
# File lib/gallus/log.rb, line 15
def delete(name)
  Repository.delete_with_children(name)
end
global_context() { |global_context| ... } click to toggle source
# File lib/gallus/log.rb, line 36
def global_context
  @@global_context_mutex.synchronize { yield @@global_context }
end
new(parent, name) { |self| ... } click to toggle source
# File lib/gallus/log.rb, line 52
def initialize(parent, name, &block)
  @parent, @name = parent, name.to_s

  if parent
    @output = (@parent.output || []).dup
    @serialization = @parent.serialization
    self.level = @parent.level
  end

  @output ||= []
  @serialization ||= Serialization::Inspect.new

  yield self if block_given?
end
root() click to toggle source
# File lib/gallus/log.rb, line 44
def root
  @@root
end

Public Instance Methods

context() click to toggle source
# File lib/gallus/log.rb, line 74
def context
  @context ||= {}
end
level=(level) click to toggle source
# File lib/gallus/log.rb, line 67
def level=(level)
  level = level.is_a?(Level) ? level : Level[level.to_s]
  return if @level == level
  self.class.class_eval { define_log_methods!(level) }
  @level = level
end

Private Instance Methods

log(level, message, payload = {}, &block) click to toggle source
# File lib/gallus/log.rb, line 88
def log(level, message, payload = {}, &block)
  payload = merged_context.merge(payload)
  serialized_payload = serialization.call(Payload.new(payload).to_h)
  event = Event.new(@name, level, message.to_s, serialized_payload.empty? ? nil : serialized_payload)
  output.each { |out| out.call(event) }
end
merged_context() click to toggle source
# File lib/gallus/log.rb, line 80
def merged_context
  {}.tap do |merged|
    self.class.global_context { |ctx| merged.merge!(ctx) }
    self.class.current_thread_context { |ctx| merged.merge!(ctx) }
    merged.merge!(context)
  end
end