Sha256: 9aff1308d25e12c8b1011d2964ad764825519b10dec41217f1b21cedc2b92050
Contents?: true
Size: 1.53 KB
Versions: 1
Compression:
Stored size: 1.53 KB
Contents
require 'rack/commonlogger' require 'logstash/event' module Rack module Logstasher class Logger < Rack::CommonLogger def initialize(app, logger, opts = {}) super(app, logger) @extra_headers = opts[:extra_headers] || {} end private def log(env, status, header, began_at) now = Time.now data = { :method => env["REQUEST_METHOD"], :path => env["PATH_INFO"], :status => status.to_i, :duration => duration_in_ms(began_at, now).round(2), :remote_addr => env['REMOTE_ADDR'], :parameters => env["QUERY_STRING"], :request => request_line(env), :length => extract_content_length(header) } @extra_headers.each do |header, log_key| env_key = "HTTP_#{header.upcase.gsub('-', '_')}" if env[env_key] data[log_key] = env[env_key] end end event = LogStash::Event.new('@fields' => data, '@tags' => ['request']) msg = event.to_json + "\n" if @logger.respond_to?(:write) @logger.write(msg) else @logger << msg end end def duration_in_ms(began, ended) (ended - began) * 1000 end def request_line(env) line = "#{env["REQUEST_METHOD"]} #{env["SCRIPT_NAME"]}#{env['PATH_INFO']}" line << "?#{env["QUERY_STRING"]}" if env["QUERY_STRING"] and ! env["QUERY_STRING"].empty? line << " #{env["SERVER_PROTOCOL"]}" line end end # Logger end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rack-logstasher-0.0.1 | lib/rack/logstasher/logger.rb |