httplog 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,6 +1,8 @@
1
1
  == httplog
2
2
 
3
3
  Log outgoing HTTP requests made from your application.
4
+ See the {blog post}[http://trusche.github.com/blog/2011/09/29/logging-outgoing-http-requests/]
5
+ for more details.
4
6
 
5
7
  === Installation
6
8
 
@@ -29,10 +31,40 @@ You can override the following default options:
29
31
 
30
32
  So if you want to use this in a Rails app:
31
33
 
32
- = file: config/initializers/httplog.rb
33
-
34
+ # config/initializers/httplog.rb
34
35
  HttpLog.options[:logger] = Rails.logger
35
36
 
37
+ === Example
38
+
39
+ With the default configuration, the log output might look like this:
40
+
41
+ D, [2012-11-21T15:09:03.532970 #6857] DEBUG -- : [httplog] Connecting: localhost
42
+ D, [2012-11-21T15:09:03.533877 #6857] DEBUG -- : [httplog] Sending: GET http://localhost:9292/index.html
43
+ D, [2012-11-21T15:09:03.534499 #6857] DEBUG -- : [httplog] Status: 200
44
+ D, [2012-11-21T15:09:03.534544 #6857] DEBUG -- : [httplog] Benchmark: 0.00057 seconds
45
+ D, [2012-11-21T15:09:03.534578 #6857] DEBUG -- : [httplog] Response:
46
+ <html>
47
+ <head>
48
+ <title>Test Page</title>
49
+ </head>
50
+ <body>
51
+ <h1>This is the test page.</h1>
52
+ </body>
53
+ </html>
54
+
55
+
56
+ === Known Issues
57
+
58
+ When using open-uri, the reading of the HTTP response body is deferred,
59
+ so it is not available for logging. This will be noted in the logging statement:
60
+
61
+ D, [2012-11-21T15:09:03.547005 #6857] DEBUG -- : [httplog] Connecting: localhost
62
+ D, [2012-11-21T15:09:03.547938 #6857] DEBUG -- : [httplog] Sending: GET http://localhost:9292/index.html
63
+ D, [2012-11-21T15:09:03.548615 #6857] DEBUG -- : [httplog] Status: 200
64
+ D, [2012-11-21T15:09:03.548662 #6857] DEBUG -- : [httplog] Benchmark: 0.000617 seconds
65
+ D, [2012-11-21T15:09:03.548695 #6857] DEBUG -- : [httplog] Response: (not available yet)
66
+
67
+
36
68
  === Running the specs
37
69
 
38
70
  Make sure you have the necessary dependencies installed by running `bundle install`.
@@ -43,5 +75,6 @@ This will launch a simple rack server on port 9292 and run all tests locally aga
43
75
 
44
76
  If you have any issues with httplog,
45
77
  or feature requests,
46
- please [add an issue](https://github.com/trusche/httplog/issues) on GitHub
47
- or fork the project and send a pull request.
78
+ please {add an issue}[https://github.com/trusche/httplog/issues] on GitHub
79
+ or fork the project and send a pull request.
80
+ Please include passing specs with all pull requests.
@@ -9,6 +9,7 @@ module HttpLog
9
9
  :severity => Logger::Severity::DEBUG,
10
10
  :log_connect => true,
11
11
  :log_request => true,
12
+ :log_headers => false,
12
13
  :log_data => true,
13
14
  :log_status => true,
14
15
  :log_response => true,
@@ -18,7 +19,7 @@ module HttpLog
18
19
  end
19
20
 
20
21
  def self.log(msg)
21
- @@options[:logger].add(@@options[:severity]) { msg }
22
+ @@options[:logger].add(@@options[:severity]) { "[httplog] #{msg}" }
22
23
  end
23
24
 
24
25
  end
@@ -33,34 +34,43 @@ module Net
33
34
 
34
35
  if started? && !HttpLog.options[:compact_log]
35
36
  if HttpLog.options[:log_request]
36
- HttpLog::log("[httplog] Sending: #{req.method} http://#{@address}:#{@port}#{req.path}")
37
+ HttpLog::log("Sending: #{req.method} http://#{@address}:#{@port}#{req.path}")
37
38
  end
38
39
 
39
40
  if HttpLog.options[:log_headers]
40
41
  req.each_header do |key,value|
41
- HttpLog::log("[httplog] Header: #{key} -> #{value}")
42
+ HttpLog::log("Header: #{key}: #{value}")
42
43
  end
43
44
  end
44
45
 
45
46
  if req.method == "POST" && HttpLog.options[:log_data]
46
- # a bit convoluted becase post_form uses form_data= to assign the data, so
47
- # in that case req.body will be empty
47
+ # A bit convoluted becase post_form uses form_data= to assign the data, so
48
+ # in that case req.body will be empty.
48
49
  data = req.body.nil? || req.body.size == 0 ? body : req.body
49
- HttpLog::log("[httplog] Data: #{data}")
50
+ HttpLog::log("Data: #{data}")
50
51
  end
51
52
  end
52
53
 
53
- r0 = Time.now
54
- response = orig_request(req, body, &block)
55
- benchmark = Time.now - r0
54
+ ts_start = Time.now
55
+ response = orig_request(req, body, &block)
56
+ benchmark = Time.now - ts_start
56
57
 
57
58
  if started?
58
59
  if HttpLog.options[:compact_log]
59
- HttpLog::log("[httplog] #{req.method} http://#{@address}:#{@port}#{req.path} completed with status code #{response.code} in #{benchmark}")
60
+ HttpLog::log("#{req.method} http://#{@address}:#{@port}#{req.path} completed with status code #{response.code} in #{benchmark} seconds")
60
61
  else
61
- HttpLog::log("[httplog] Status: #{response.code}") if HttpLog.options[:log_status]
62
- HttpLog::log("[httplog] Response:\n#{response.body}") if HttpLog.options[:log_response]
63
- HttpLog::log("[httplog] Benchmark: #{benchmark}") if HttpLog.options[:log_benchmark]
62
+ HttpLog::log("Status: #{response.code}") if HttpLog.options[:log_status]
63
+ HttpLog::log("Benchmark: #{benchmark} seconds") if HttpLog.options[:log_benchmark]
64
+
65
+ if HttpLog.options[:log_response]
66
+ if response.body.is_a?(Net::ReadAdapter)
67
+ # open-uri wraps the response in a Net::ReadAdapter that defers reading
68
+ # the contrent, so the reponse body is not available here.
69
+ HttpLog::log("Response: (not available yet)")
70
+ else
71
+ HttpLog::log("Response:\n#{response.body.to_s}")
72
+ end
73
+ end
64
74
  end
65
75
  end
66
76
 
@@ -69,7 +79,7 @@ module Net
69
79
 
70
80
  def connect
71
81
  unless started? || HttpLog.options[:compact_log]
72
- HttpLog::log("[httplog] Connecting: #{@address}") if HttpLog.options[:log_connect]
82
+ HttpLog::log("Connecting: #{@address}") if HttpLog.options[:log_connect]
73
83
  end
74
84
  orig_connect
75
85
  end
@@ -1,3 +1,3 @@
1
1
  module HttpLog
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: httplog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-12 00:00:00.000000000 Z
12
+ date: 2012-11-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -38,7 +38,6 @@ files:
38
38
  - lib/httplog/http_log.rb
39
39
  - lib/httplog/version.rb
40
40
  - lib/httplog.rb
41
- - lib/tasks/http_log_tasks.rake
42
41
  - MIT-LICENSE
43
42
  - Rakefile
44
43
  - README.rdoc
@@ -54,9 +53,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
54
53
  - - ! '>='
55
54
  - !ruby/object:Gem::Version
56
55
  version: '0'
57
- segments:
58
- - 0
59
- hash: 418187136863777166
60
56
  required_rubygems_version: !ruby/object:Gem::Requirement
61
57
  none: false
62
58
  requirements:
@@ -70,3 +66,4 @@ signing_key:
70
66
  specification_version: 3
71
67
  summary: Logs outgoing Net::HTTP requests.
72
68
  test_files: []
69
+ has_rdoc:
@@ -1,4 +0,0 @@
1
- # desc "Explaining what the task does"
2
- # task :httplog do
3
- # # Task goes here
4
- # end