class Ougai::Logger

def self.broadcast(logger)

def self.broadcast(logger)
  Module.new do |mdl|
    ::Logger::Severity.constants.each do |severity|
      method_name = severity.downcase.to_sym
      mdl.send(:define_method, method_name) do |*args|
        logger.send(method_name, *args)
        super(*args)
      end
    end
  end
end

def create_formatter

def create_formatter
  Formatters::Bunyan.new
end

def debug(message, ex = nil, data = nil)

def debug(message, ex = nil, data = nil)
  super(to_item(message, ex, data))
end

def error(message, ex = nil, data = nil)

def error(message, ex = nil, data = nil)
  super(to_item(message, ex, data))
end

def fatal(message, ex = nil, data = nil)

def fatal(message, ex = nil, data = nil)
  super(to_item(message, ex, data))
end

def info(message, ex = nil, data = nil)

def info(message, ex = nil, data = nil)
  super(to_item(message, ex, data))
end

def initialize(*args)

def initialize(*args)
  super(*args)
  @default_message = 'No message'
  @exc_key = :err
  @formatter = create_formatter
end

def set_exc(item, exc)

def set_exc(item, exc)
  item[@exc_key] = @formatter.serialize_exc(exc)
end

def to_item(msg, ex, data)

def to_item(msg, ex, data)
  item = {}
  if ex.nil?       # 1 arg
    if msg.is_a?(Exception)
      item[:msg] = msg.to_s
      set_exc(item, msg)
    elsif msg.is_a?(Hash)
      item[:msg] = @default_message unless msg.key?(:msg)
      item.merge!(msg)
    else
      item[:msg] = msg.to_s
    end
  elsif data.nil?  # 2 args
    if ex.is_a?(Exception)
      item[:msg] = msg.to_s
      set_exc(item, ex)
    elsif ex.is_a?(Hash)
      item.merge!(ex)
      if msg.is_a?(Exception)
        set_exc(item, msg)
      else
        item[:msg] = msg.to_s
      end
    end
  elsif msg        # 3 args
    set_exc(item, ex) if ex.is_a?(Exception)
    item.merge!(data) if data.is_a?(Hash)
    item[:msg] = msg.to_s
  else             # No args
    item[:msg] = @default_message
  end
  item
end

def warn(message, ex = nil, data = nil)

def warn(message, ex = nil, data = nil)
  super(to_item(message, ex, data))
end