semlogger
This commit is contained in:
parent
bef0442c3b
commit
431028811e
13 changed files with 76 additions and 54 deletions
82
lib/semlogger.rb
Normal file
82
lib/semlogger.rb
Normal file
|
@ -0,0 +1,82 @@
|
|||
require 'json'
|
||||
|
||||
class Semlogger < ::Logger
|
||||
def initialize logdev = nil, *a, &e
|
||||
case logdev
|
||||
when String, nil then logdev = ::Semlogger::Writer.new logdev
|
||||
end
|
||||
@level, @data, @tags, @logdev = DEBUG, {}, [], logdev
|
||||
end
|
||||
|
||||
def tagged tags, &e
|
||||
@tags += tags
|
||||
tags = tags.size
|
||||
yield
|
||||
ensure
|
||||
tags.times { @tags.pop }
|
||||
end
|
||||
|
||||
def add severity, message = nil, progname = nil, &block
|
||||
severity ||= UNKNOWN
|
||||
if @logdev.nil? or severity < @level
|
||||
return true
|
||||
end
|
||||
progname ||= @progname
|
||||
if message.nil?
|
||||
if block_given?
|
||||
message = yield
|
||||
else
|
||||
message = progname
|
||||
progname = @progname
|
||||
end
|
||||
end
|
||||
@logdev.add severity, Time.new, progname, format_data( @data), format_tags( @tags), format_msg( message)
|
||||
end
|
||||
|
||||
def format_msg msg
|
||||
case msg
|
||||
when String, Numeric, true, false, nil then [msg]
|
||||
when Exception then [:exception, msg.class.name, msg.message.to_s, msg.backtrace]
|
||||
else [:obj, msg]
|
||||
end
|
||||
end
|
||||
|
||||
def format_obj obj
|
||||
case obj
|
||||
when Proc then obj.call
|
||||
else obj
|
||||
end
|
||||
end
|
||||
|
||||
def format_tags tags
|
||||
tags = tags ? tags.dup : []
|
||||
tags.map &method( :format_obj)
|
||||
end
|
||||
|
||||
def format_data data
|
||||
data = data ? data.dup : {}
|
||||
data.each {|k,v| data[k] = format_obj v }
|
||||
end
|
||||
|
||||
def data data, &e
|
||||
@data.update data
|
||||
keys = data.keys
|
||||
yield
|
||||
ensure
|
||||
keys.each &data.method( :delete)
|
||||
end
|
||||
|
||||
def caller &e
|
||||
data caller: Kernel.method(:caller), &e
|
||||
end
|
||||
|
||||
def thread &e
|
||||
data thread: Proc.new { Thread.current.object_id }, &e
|
||||
end
|
||||
end
|
||||
|
||||
require 'semlogger/rotate'
|
||||
require 'semlogger/multiplex'
|
||||
require 'semlogger/rack'
|
||||
require 'semlogger/filter'
|
||||
require 'semlogger/writer'
|
Loading…
Add table
Add a link
Reference in a new issue