semlogger/lib/slogger/formatter.rb

39 lines
743 B
Ruby

class Slogger::Formatter < ::Logger::Formatter
def initialize tags, data
@tags, @data = tags, data
end
def obj2ser obj
case obj
when Proc then obj.call
else obj
end
end
def tags2list tags
tags = tags ? tags.dup : []
tags.map &method( :obj2ser)
end
def data2ser data
data = data ? data.dup : {}
data.each {|k,v| data[k] = obj2ser v }
end
def entry severity, time, progname, msg, tags, data
e = {
lvl: severity,
ts: time,
}
e[:prog] = progname if progname
e[:tags] = tags if tags and not tags.empty?
e[:data] = data if data and not data.empty?
e[:msg] = msg
e
end
def call severity, time, progname, msg
[severity, time.xmlschema(9), progname, msg, tags, data].to_json + "\n"
end
end