class EventSpider::Logger
Constants
- ERROR_FORMAT
- FILTER
- REQUEST_FORMAT
- RESPONSE_FORMAT
Public Class Methods
new(app, taggers = nil)
click to toggle source
# File lib/logger.rb, line 15 def initialize(app, taggers = nil) @app = app @taggers = taggers || [] end
Public Instance Methods
call(env)
click to toggle source
# File lib/logger.rb, line 20 def call(env) request = Rack::Request.new(env) if logger.respond_to?(:tagged) logger.tagged(compute_tags(request)) { call_app(request, env) } else call_app(request, env) end end
Protected Instance Methods
call_app(request, env)
click to toggle source
# File lib/logger.rb, line 31 def call_app(request, env) # Put some space between requests in development logs. if development? logger.debug '' end began_at = Time.now resp = @app.call(env) status, header, body = resp logger.info started_request_message(request) logger.info started_response_message(status, header, body, began_at) instrumenter = ActiveSupport::Notifications.instrumenter instrumenter.start 'request', request: request resp[2] = ::Rack::BodyProxy.new(resp[2]) { finish(request) } resp rescue Exception => e error_logger.debug '' error_logger.info started_request_message(request) error_logger.info started_error_message(e) logger.debug '' logger.info started_request_message(request) logger.info started_error_message(e) finish(request) raise if development? ensure ActiveSupport::LogSubscriber.flush_all! end
started_error_message(e)
click to toggle source
# File lib/logger.rb, line 86 def started_error_message(e) ERROR_FORMAT % [ e, e.backtrace.join("\n") ] end
started_request_message(request)
click to toggle source
# File lib/logger.rb, line 63 def started_request_message(request) REQUEST_FORMAT % [ request.ip, request.request_method, request.env['REQUEST_URI'], Time.now.to_default_s, request.user_agent, request_headers(request), filter_params(request.params) ] end
started_response_message(status, header, body, began_at)
click to toggle source
# File lib/logger.rb, line 75 def started_response_message(status, header, body, began_at) now = Time.now RESPONSE_FORMAT % [ status, now - began_at, header, body.length, body.present? && status < 400 ? body.body.first.truncate(1000) : '' ] end
Private Instance Methods
development?()
click to toggle source
# File lib/logger.rb, line 112 def development? ENV['RACK_ENV'] end
error_logger()
click to toggle source
# File lib/logger.rb, line 120 def error_logger ActiveSupport::Logger.new("log/#{ENV['RACK_ENV']}_error.log") end
filter_params(original_params)
click to toggle source
# File lib/logger.rb, line 131 def filter_params(original_params) filtered_params = {} original_params.each do |key, value| if FILTER.include? key filtered_params[key] = '敏感词' else filtered_params[key] = value end end filtered_params end
finish(request)
click to toggle source
# File lib/logger.rb, line 107 def finish(request) instrumenter = ActiveSupport::Notifications.instrumenter instrumenter.finish 'request', request: request end
logger()
click to toggle source
# File lib/logger.rb, line 116 def logger ActiveSupport::Logger.new("log/#{ENV['RACK_ENV']}.log") end
request_headers(request)
click to toggle source
# File lib/logger.rb, line 124 def request_headers(request) request.env.select {|k,v| k.start_with? 'HTTP_'} .collect { |pair| [pair[0].sub(/^HTTP_/, ''), pair[1]] } .collect { |pair| pair.join(": ") } .sort end