rack-commonlogger 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/rack-commonlogger.rb +3 -0
- data/lib/rack/commonlogger.rb +71 -0
- data/lib/rack/commonlogger/version.rb +5 -0
- data/spec/lib/rack/commonlogger.rb +24 -0
- data/spec/lib/rack/commonlogger/version_spec.rb +7 -0
- data/spec/spec_helper.rb +6 -0
- metadata +138 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5bdcd1f39f69551ac79ace49c6185f25845e3923
|
4
|
+
data.tar.gz: 4d1782eda0d67ce0705584f1dcec75490d5bb1b7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2529cb7b0525536e74b9ed1ef33ff5bbb37e838abec9f348ba796e777baaf2f7d5a4b23c01be13c01d016e773563602af5904248462512f48421165200d97a6b
|
7
|
+
data.tar.gz: 110beaaa8862dd4c990046f126b20ee99052f965ab500d8ff7a39c267ca8dfb909c1e1b182474b5a4464962ff1e3eb02e61b9e9c38acfb1cd0001121f23bc48b
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Rack
|
2
|
+
# Rack::CommonLogger forwards every request to the given +app+, and
|
3
|
+
# logs a line in the
|
4
|
+
# {Apache common log format}[http://httpd.apache.org/docs/1.3/logs.html#common]
|
5
|
+
# to the +logger+.
|
6
|
+
#
|
7
|
+
# If +logger+ is nil, CommonLogger will fall back +rack.errors+, which is
|
8
|
+
# an instance of Rack::NullLogger.
|
9
|
+
#
|
10
|
+
# +logger+ can be any class, including the standard library Logger, and is
|
11
|
+
# expected to have either +write+ or +<<+ method, which accepts the CommonLogger::FORMAT.
|
12
|
+
# According to the SPEC, the error stream must also respond to +puts+
|
13
|
+
# (which takes a single argument that responds to +to_s+), and +flush+
|
14
|
+
# (which is called without arguments in order to make the error appear for
|
15
|
+
# sure)
|
16
|
+
module CommonLogger
|
17
|
+
require_relative "commonlogger/version"
|
18
|
+
# Common Log Format: http://httpd.apache.org/docs/1.3/logs.html#common
|
19
|
+
#
|
20
|
+
# lilith.local - - [07/Aug/2006 23:58:02 -0400] "GET / HTTP/1.1" 500 -
|
21
|
+
#
|
22
|
+
# %{%s - %s [%s] "%s %s%s %s" %d %s\n} %
|
23
|
+
FORMAT = %{%s - %s [%s] "%s %s%s %s" %d %s %0.4f\n}
|
24
|
+
|
25
|
+
def initialize(app, logger = nil)
|
26
|
+
@app = app
|
27
|
+
@logger = logger
|
28
|
+
end
|
29
|
+
|
30
|
+
def call(env)
|
31
|
+
began_at = Time.now
|
32
|
+
status, header, body = @app.call(env)
|
33
|
+
header = Utils::HeaderHash.new(header)
|
34
|
+
body = BodyProxy.new(body) { log(env, status, header, began_at) }
|
35
|
+
[status, header, body]
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def log(env, status, header, began_at)
|
41
|
+
now = Time.now
|
42
|
+
length = extract_content_length(header)
|
43
|
+
|
44
|
+
msg = FORMAT % [
|
45
|
+
env['HTTP_X_FORWARDED_FOR'] || env["REMOTE_ADDR"] || "-",
|
46
|
+
env["REMOTE_USER"] || "-",
|
47
|
+
now.strftime("%d/%b/%Y:%H:%M:%S %z"),
|
48
|
+
env[REQUEST_METHOD],
|
49
|
+
env[PATH_INFO],
|
50
|
+
env[QUERY_STRING].empty? ? "" : "?"+env[QUERY_STRING],
|
51
|
+
env["HTTP_VERSION"],
|
52
|
+
status.to_s[0..3],
|
53
|
+
length,
|
54
|
+
now - began_at ]
|
55
|
+
|
56
|
+
logger = @logger || env['rack.errors']
|
57
|
+
# Standard library logger doesn't support write but it supports << which actually
|
58
|
+
# calls to write on the log device without formatting
|
59
|
+
if logger.respond_to?(:write)
|
60
|
+
logger.write(msg)
|
61
|
+
else
|
62
|
+
logger << msg
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def extract_content_length(headers)
|
67
|
+
value = headers[CONTENT_LENGTH] or return '-'
|
68
|
+
value.to_s == '0' ? '-' : value
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Rack::CommonLogger do
|
4
|
+
let(:application) { instance_double("Application") }
|
5
|
+
let(:middleware) { described_class.new(application) }
|
6
|
+
let(:verb) { "GET" }
|
7
|
+
let(:status) { 200 }
|
8
|
+
let(:headers) do
|
9
|
+
{
|
10
|
+
"REQUEST_METHOD" => verb,
|
11
|
+
"Content-Type" => "text/plain",
|
12
|
+
"Content-Length" => "0"
|
13
|
+
}
|
14
|
+
end
|
15
|
+
let(:body) { "" }
|
16
|
+
|
17
|
+
before(:each) do
|
18
|
+
allow(application).to receive(:call).and_return([status, headers, body])
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#call" do
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rack-commonlogger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kurtis Rainbolt-Greene
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-10-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.1'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.9'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.9'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry-doc
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.6'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.6'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: codeclimate-test-reporter
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.4'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.4'
|
97
|
+
description: Writes commonlogger to responses
|
98
|
+
email:
|
99
|
+
- me@kurtisrainboltgreene.name
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- lib/rack-commonlogger.rb
|
105
|
+
- lib/rack/commonlogger.rb
|
106
|
+
- lib/rack/commonlogger/version.rb
|
107
|
+
- spec/lib/rack/commonlogger.rb
|
108
|
+
- spec/lib/rack/commonlogger/version_spec.rb
|
109
|
+
- spec/spec_helper.rb
|
110
|
+
homepage: http://krainboltgreene.github.io/rack-commonlogger
|
111
|
+
licenses:
|
112
|
+
- MIT
|
113
|
+
metadata: {}
|
114
|
+
post_install_message:
|
115
|
+
rdoc_options: []
|
116
|
+
require_paths:
|
117
|
+
- lib
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
123
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
requirements: []
|
129
|
+
rubyforge_project:
|
130
|
+
rubygems_version: 2.2.2
|
131
|
+
signing_key:
|
132
|
+
specification_version: 4
|
133
|
+
summary: Writes commonlogger to responses
|
134
|
+
test_files:
|
135
|
+
- spec/lib/rack/commonlogger/version_spec.rb
|
136
|
+
- spec/lib/rack/commonlogger.rb
|
137
|
+
- spec/spec_helper.rb
|
138
|
+
has_rdoc:
|