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 = {})
(**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