def log severity, *args
opts = args.pop if args.last.is_a? Hash and args.size != 1
opts ||= {}
opts = @prop.clone.update(opts)
data = args.shift
data = {:type => :exception,
:name => data.class.to_s.intern,
:backtrace => data.backtrace,
:message => data.message} if data.is_a? Exception
(@tags + args).each do |tag|
tag = tag.to_sym
case tag
when :timestamp
opts.update :timestamp => Time.now
when :hostname
@hostname ||= { :hostname => `hostname`.strip }
opts.update @hostname
when :process
@process_id ||= { :process_id => Process.pid,
:process_name => $0,
:process_parent_id => Process.ppid,
:thread_id => Thread.current.object_id }
opts.update :process => @process_id
else
(opts[:tags] ||= []) << tag
end
end
opts.update(:severity => severity,
:msg => data)
print(opts)
unless Logger.disabled?
MQ.fanout('logging', :durable => true).publish Marshal.dump(opts)
end
opts
end