class Ougai::Formatters::Base

@attr [Boolean] serialize_backtrace Whether exception should converts String (by default this is on).
@attr [Fixnum] trace_max_lines Keep exception backtrace lines (by default this is 100).
@attr [Fixnum] trace_indent Specify exception backtrace indent (by default this is 2).
Custom formatter must override ‘_call`.
Base formatter

def self.parse_new_params(args)

def self.parse_new_params(args)
  idx = args.index {|i| i.is_a?(Hash) }
  return args if idx == 2
  opts = args[idx]
  app_name = opts.delete(:app_name)
  hostname = opts.delete(:hostname)
  app_name ||= args[0] if idx > 0
  [app_name, hostname, opts]
end

def _call(severity, time, progname, data)

def _call(severity, time, progname, data)
  raise NotImplementedError, "_call must be implemented"
end

def call(severity, time, progname, data)

def call(severity, time, progname, data)
  _call(severity, time, progname, data.is_a?(Hash) ? data : { msg: data.to_s })
end

def datetime_format=(value)

def datetime_format=(value)
  @datetime_format = value || default_datetime_format
end

def default_datetime_format

def default_datetime_format
  "%FT%T.%3N#{(Time.new.utc? ? 'Z' : '%:z')}"
end

def format_datetime(time)

def format_datetime(time)
  time.strftime(@datetime_format)
end

def initialize(app_name = nil, hostname = nil, opts = {})

Options Hash: (**opts)
  • :serialize_backtrace (String) -- the value of serialize_backtrace attribute
  • :trace_max_lines (String) -- the value of trace_max_lines attribute
  • :trace_indent (String) -- the value of trace_indent attribute

Parameters:
  • opts (Hash) -- the initial values of attributes
  • hostname (String) -- hostname
  • app_name (String) -- application name
def initialize(app_name = nil, hostname = nil, opts = {})
  @app_name = app_name || File.basename($0, ".rb")
  @hostname = hostname || Socket.gethostname.force_encoding('UTF-8')
  @trace_indent = opts.fetch(:trace_indent, 2)
  @trace_max_lines = opts.fetch(:trace_max_lines, 100)
  @serialize_backtrace = opts.fetch(:serialize_backtrace, true)
  self.datetime_format = nil
end

def serialize_exc(ex)

def serialize_exc(ex)
  err = {
    name: ex.class.name,
    message: ex.to_s
  }
  if ex.backtrace
    bt = ex.backtrace.slice(0, @trace_max_lines)
    err[:stack] = @serialize_backtrace ? serialize_trace(bt) : bt
  end
  err
end

def serialize_trace(trace)

def serialize_trace(trace)
  sp = "\n" + ' ' * @trace_indent
  trace.join(sp)
end