module Ougai::Logging

def append(severity, args)

def append(severity, args)
  raise NotImplementedError
end

def chain(severity, args, fields)

def chain(severity, args, fields)
  raise NotImplementedError
end

def child(fields = {})

def child(fields = {})
  ChildLogger.new(self, fields)
end

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

def debug(message = nil, ex = nil, data = nil, &block)
  return true if level > Logger::DEBUG
  args = block ? yield : [message, ex, data]
  append(Logger::DEBUG, args)
end

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

def error(message = nil, ex = nil, data = nil, &block)
  return true if level > Logger::ERROR
  args = block ? yield : [message, ex, data]
  append(Logger::ERROR, args)
end

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

def fatal(message = nil, ex = nil, data = nil, &block)
  return true if level > Logger::FATAL
  args = block ? yield : [message, ex, data]
  append(Logger::FATAL, args)
end

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

def info(message = nil, ex = nil, data = nil, &block)
  return true if level > Logger::INFO
  args = block ? yield : [message, ex, data]
  append(Logger::INFO, args)
end

def merge_fields(base_data, new_data)

def merge_fields(base_data, new_data)
  base_data.merge(new_data) do |_, base_val, new_val|
    if base_val.is_a?(Array) and new_val.is_a?(Array)
      (base_val + new_val).uniq
    else
      new_val
    end
  end
end

def unknown(message = nil, ex = nil, data = nil, &block)

def unknown(message = nil, ex = nil, data = nil, &block)
  args = block ? yield : [message, ex, data]
  append(Logger::UNKNOWN, args)
end

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

def warn(message = nil, ex = nil, data = nil, &block)
  return true if level > Logger::WARN
  args = block ? yield : [message, ex, data]
  append(Logger::WARN, args)
end