class Log4r::LogdnaOutputter
Public Class Methods
new(_name, hash={})
click to toggle source
Calls superclass method
# File lib/log4r-logdna/logdna_outputter.rb, line 8 def initialize(_name, hash={}) super(_name, hash) logdna_key = hash['logdna_key'] || ENV['LOGDNA_KEY'] opts = {} opts[:hostname] = hash['hostname'] if hash['hostname'] opts[:ip] = hash['ip'] if hash['ip'] opts[:mac] = hash['mac'] if hash['mac'] opts[:env] = hash['env'] || ENV['RACK_ENV'] @gdc_key = hash.has_key?('global_context_key') ? hash['global_context_key'] : "gdc" @ndc_prefix = hash.has_key?('nested_context_prefix') ? hash['nested_context_prefix'] : "ndc_" @mdc_prefix = hash.has_key?('mapped_context_prefix') ? hash['mapped_context_prefix'] : "mdc_" @client = ::Logdna::Client.new(logdna_key, opts) end
Public Instance Methods
format_attribute(value)
click to toggle source
# File lib/log4r-logdna/logdna_outputter.rb, line 25 def format_attribute(value) value end
Private Instance Methods
canonical_log(logevent)
click to toggle source
# File lib/log4r-logdna/logdna_outputter.rb, line 31 def canonical_log(logevent) msg = { :level => Log4r::LNAMES[logevent.level], :logger => logevent.fullname } if logevent.data.respond_to?(:backtrace) trace = logevent.data.backtrace if trace msg["_exception"] = format_attribute(logevent.data.class) msg[:message] = "Caught #{logevent.data.class}: #{logevent.data.message}" msg[:full_message] = "Backtrace:\n" + trace.join("\n") msg[:file] = trace[0].split(":")[0] msg[:line] = trace[0].split(":")[1] end end if logevent.tracer trace = logevent.tracer.join("\n") msg[:full_message] = "#{msg[:full_message]}\nLog tracer:\n#{trace}" msg[:file] = logevent.tracer[0].split(":")[0] msg[:line] = logevent.tracer[0].split(":")[1] end gdc = Log4r::GDC.get if gdc && gdc != $0 && @gdc_key begin msg["#{@gdc_key}"] = format_attribute(gdc) rescue end end if Log4r::NDC.get_depth > 0 && @ndc_prefix Log4r::NDC.clone_stack.each_with_index do |x, i| begin msg["#{@ndc_prefix}#{i}"] = format_attribute(x) rescue end end end mdc = Log4r::MDC.get_context if mdc && mdc.size > 0 && @mdc_prefix mdc.each do |k, v| begin msg["#{@mdc_prefix}#{k}"] = format_attribute(v) rescue end end end # Extract any context values out of the logevent's data hash. if logevent.data.respond_to?(:has_key?) logevent.data.each do |key, value| if key.to_s =~ /^_/ msg[key] = value end end msg[:message] = logevent.data[:message] if logevent.data.has_key?(:message) end msg[:message] = format(logevent) unless msg[:message] app = logevent.fullname.split(/::/)[0] @client.tobuffer(msg.to_json, {:app => app}) rescue => err puts "LogDNA logger. Could not send message: " + err.message puts err.backtrace.join("\n") if err.backtrace end