]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/aviator/feature/aviator/core/logger.rb
add aimonb/aviator to 3rdparty
[dsa-puppet.git] / 3rdparty / modules / aviator / feature / aviator / core / logger.rb
1 module Aviator
2
3   class Logger < Faraday::Response::Middleware
4     extend Forwardable
5
6     def initialize(app, logger=nil)
7       super(app)
8       @logger = logger || begin
9         require 'logger'
10         ::Logger.new(self.class::LOG_FILE_PATH)
11       end
12     end
13
14
15     def_delegators :@logger, :debug, :info, :warn, :error, :fatal
16
17
18     def call(env)
19       info(env[:method].to_s.upcase) { env[:url].to_s }
20       debug('REQ_HEAD') { dump_headers env[:request_headers] }
21       debug('REQ_BODY') { dump_body env[:body] }
22       super
23     end
24
25
26     def on_complete(env)
27       info('STATUS') { env[:status].to_s }
28       debug('RES_HEAD') { dump_headers env[:response_headers] }
29       debug('RES_BODY') { dump_body env[:body] }
30     end
31
32
33     def self.configure(log_file_path)
34       # Return a subclass with its logfile path set. This
35       # must be done so that different sessions can log to
36       # different paths.
37       Class.new(self) { const_set('LOG_FILE_PATH', log_file_path) }
38     end
39
40
41     private
42
43     def dump_body(body)
44       return if body.nil?
45
46       # :TODO => Make this configurable
47       body.gsub(/["']password["']:["']\w*["']/, '"password":[FILTERED_VALUE]')
48     end
49
50     def dump_headers(headers)
51       headers.map { |k, v| "#{k}: #{v.inspect}" }.join("; ")
52     end
53   end
54
55 end