module Ougai::Logging

def append(severity, args)

def append(severity, args)
  raise NotImplementedError
end

def chain(_severity, _args, _fields, _hooks)

def chain(_severity, _args, _fields, _hooks)
  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)
  log(Logger::DEBUG, message, ex, data, block)
end

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

def error(message = nil, ex = nil, data = nil, &block)
  log(Logger::ERROR, message, ex, data, block)
end

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

def fatal(message = nil, ex = nil, data = nil, &block)
  log(Logger::FATAL, message, ex, data, block)
end

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

def info(message = nil, ex = nil, data = nil, &block)
  log(Logger::INFO, message, ex, data, block)
end

def log(severity, message, ex, data, block)

def log(severity, message, ex, data, block)
  return true if level > severity
  args = block ? block.call : [message, ex, data]
  append(severity, 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)
  log(Logger::WARN, message, ex, data, block)
end