clogger 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/GIT-VERSION-GEN +1 -1
- data/README +3 -3
- data/ext/clogger_ext/clogger.c +7 -2
- data/ext/clogger_ext/extconf.rb +0 -5
- data/lib/clogger/pure.rb +9 -1
- data/pkg.mk +5 -1
- data/test/test_clogger.rb +37 -0
- metadata +51 -64
data/GIT-VERSION-GEN
CHANGED
data/README
CHANGED
@@ -24,7 +24,7 @@ is customizable so you can specify exactly which fields to log.
|
|
24
24
|
|
25
25
|
* Pure Ruby version for non-MRI versions of Ruby (or via CLOGGER_PURE=1
|
26
26
|
in the environment). The optional C extension is loaded by default
|
27
|
-
and supported under MRI 1.8.7, 1.9
|
27
|
+
and supported under MRI 1.8.7, 1.9, 2.0 and Rubinius.
|
28
28
|
|
29
29
|
== SYNOPSIS
|
30
30
|
|
@@ -33,7 +33,7 @@ is customizable so you can specify exactly which fields to log.
|
|
33
33
|
# ENV['CLOGGER_PURE'] = '1' # uncomment to disable C extension
|
34
34
|
require "clogger"
|
35
35
|
use Clogger,
|
36
|
-
:format =>
|
36
|
+
:format => :Combined,
|
37
37
|
:path => "/path/to/log",
|
38
38
|
:reentrant => true
|
39
39
|
run YourApplication.new
|
@@ -42,7 +42,7 @@ If you're using Rails 2.3.x or later, in your config/environment.rb
|
|
42
42
|
somewhere inside the "Rails::Initializer.run do |config|" block:
|
43
43
|
|
44
44
|
config.middleware.use 'Clogger',
|
45
|
-
:format =>
|
45
|
+
:format => :Combined,
|
46
46
|
:path => "/path/to/log",
|
47
47
|
:reentrant => false
|
48
48
|
|
data/ext/clogger_ext/clogger.c
CHANGED
@@ -119,6 +119,7 @@ struct clogger {
|
|
119
119
|
int reentrant; /* tri-state, -1:auto, 1/0 true/false */
|
120
120
|
};
|
121
121
|
|
122
|
+
static ID write_id;
|
122
123
|
static ID ltlt_id;
|
123
124
|
static ID call_id;
|
124
125
|
static ID each_id;
|
@@ -687,9 +688,12 @@ static VALUE cwrite(struct clogger *c)
|
|
687
688
|
} else {
|
688
689
|
VALUE logger = c->logger;
|
689
690
|
|
690
|
-
if (NIL_P(logger))
|
691
|
+
if (NIL_P(logger)) {
|
691
692
|
logger = rb_hash_aref(c->env, g_rack_errors);
|
692
|
-
|
693
|
+
rb_funcall(logger, write_id, 1, dst);
|
694
|
+
} else {
|
695
|
+
rb_funcall(logger, ltlt_id, 1, dst);
|
696
|
+
}
|
693
697
|
}
|
694
698
|
|
695
699
|
return Qnil;
|
@@ -1036,6 +1040,7 @@ void Init_clogger_ext(void)
|
|
1036
1040
|
|
1037
1041
|
check_clock();
|
1038
1042
|
|
1043
|
+
write_id = rb_intern("write");
|
1039
1044
|
ltlt_id = rb_intern("<<");
|
1040
1045
|
call_id = rb_intern("call");
|
1041
1046
|
each_id = rb_intern("each");
|
data/ext/clogger_ext/extconf.rb
CHANGED
@@ -2,11 +2,6 @@ begin
|
|
2
2
|
require 'mkmf'
|
3
3
|
$CPPFLAGS += " -D_BSD_SOURCE=1 "
|
4
4
|
|
5
|
-
# XXX let me know if this works for you...
|
6
|
-
if ! defined?(RUBY_VERSION) || RUBY_VERSION !~ /\A1\.[89]\./
|
7
|
-
raise "Invalid RUBY_VERSION for C extension"
|
8
|
-
end
|
9
|
-
|
10
5
|
have_header('ruby.h') or raise "ruby.h header not found!"
|
11
6
|
|
12
7
|
if have_header('fcntl.h')
|
data/lib/clogger/pure.rb
CHANGED
@@ -161,7 +161,7 @@ private
|
|
161
161
|
end
|
162
162
|
|
163
163
|
def log(env, status, headers)
|
164
|
-
|
164
|
+
str = @fmt_ops.map { |op|
|
165
165
|
case op[0]
|
166
166
|
when OP_LITERAL; op[1]
|
167
167
|
when OP_REQUEST; byte_xs(env[op[1]] || "-")
|
@@ -182,5 +182,13 @@ private
|
|
182
182
|
raise "EDOOFUS #{op.inspect}"
|
183
183
|
end
|
184
184
|
}.join('')
|
185
|
+
|
186
|
+
l = @logger
|
187
|
+
if l
|
188
|
+
l << str
|
189
|
+
else
|
190
|
+
env['rack.errors'].write(str)
|
191
|
+
end
|
192
|
+
nil
|
185
193
|
end
|
186
194
|
end
|
data/pkg.mk
CHANGED
@@ -69,7 +69,7 @@ doc:: .document .wrongdoc.yml $(pkg_extra)
|
|
69
69
|
$(RM) -r doc
|
70
70
|
$(WRONGDOC) all
|
71
71
|
install -m644 COPYING doc/COPYING
|
72
|
-
install -m644 $(shell grep '^[A-Z]' .document) doc/
|
72
|
+
install -m644 $(shell LC_ALL=C grep '^[A-Z]' .document) doc/
|
73
73
|
|
74
74
|
ifneq ($(VERSION),)
|
75
75
|
pkggem := pkg/$(rfpackage)-$(VERSION).gem
|
@@ -167,5 +167,9 @@ doc_gz: docs = $(shell find doc -type f ! -regex '^.*\.\(gif\|jpg\|png\|gz\)$$')
|
|
167
167
|
doc_gz:
|
168
168
|
for i in $(docs); do \
|
169
169
|
gzip --rsyncable -9 < $$i > $$i.gz; touch -r $$i $$i.gz; done
|
170
|
+
check-warnings:
|
171
|
+
@(for i in $$(git ls-files '*.rb'| grep -v '^setup\.rb$$'); \
|
172
|
+
do $(RUBY) -d -W2 -c $$i; done) | grep -v '^Syntax OK$$' || :
|
170
173
|
|
171
174
|
.PHONY: all .FORCE-GIT-VERSION-FILE doc test $(test_units) manifest
|
175
|
+
.PHONY: check-warnings
|
data/test/test_clogger.rb
CHANGED
@@ -481,6 +481,26 @@ class TestClogger < Test::Unit::TestCase
|
|
481
481
|
assert r.object_id != body.object_id
|
482
482
|
end
|
483
483
|
|
484
|
+
# Rack::BodyProxy does this thing with method_missing
|
485
|
+
# This test fails under MRI 1.9.1 and 1.9.2, but works under 1.9.3
|
486
|
+
def test_each_with_external_block
|
487
|
+
foo = Object.new
|
488
|
+
foo.instance_variable_set(:@body, ["BodyProxy"])
|
489
|
+
def foo.method_missing(*args, &block)
|
490
|
+
@body.__send__(*args, &block)
|
491
|
+
end
|
492
|
+
app = lambda { |env| [302, [], foo] }
|
493
|
+
str = StringIO.new
|
494
|
+
cl = Clogger.new(app, :logger => str, :format => '$body_bytes_sent')
|
495
|
+
r = nil
|
496
|
+
assert_nothing_raised { r = cl.call(@req) }
|
497
|
+
body = []
|
498
|
+
r[2].each { |x| body << x }
|
499
|
+
r[2].close
|
500
|
+
assert_equal %w(BodyProxy), body
|
501
|
+
assert_equal "9\n", str.string
|
502
|
+
end
|
503
|
+
|
484
504
|
def test_http_09_request
|
485
505
|
str = StringIO.new
|
486
506
|
app = lambda { |env| [302, [ %w(a) ], []] }
|
@@ -817,4 +837,21 @@ class TestClogger < Test::Unit::TestCase
|
|
817
837
|
expect = "\"GET http://example.com/hello?goodbye=true HTTP/1.0\"\n"
|
818
838
|
assert_equal [ expect ], s
|
819
839
|
end
|
840
|
+
|
841
|
+
def test_lint_error_wrapper
|
842
|
+
require 'rack/lobster'
|
843
|
+
@req["SERVER_NAME"] = "FOO"
|
844
|
+
@req["SERVER_PORT"] = "666"
|
845
|
+
@req["rack.version"] = [1,1]
|
846
|
+
@req["rack.multithread"] = true
|
847
|
+
@req["rack.multiprocess"] = true
|
848
|
+
@req["rack.run_once"] = false
|
849
|
+
app = Rack::ContentLength.new(Rack::ContentType.new(Rack::Lobster.new))
|
850
|
+
cl = Clogger.new(app, :format => :Combined)
|
851
|
+
@req["rack.errors"] = err = StringIO.new
|
852
|
+
status, headers, body = r = Rack::Lint.new(cl).call(@req)
|
853
|
+
body.each { |x| assert_kind_of String, x.to_str }
|
854
|
+
body.close # might raise here
|
855
|
+
assert_match(%r{GET /hello}, err.string)
|
856
|
+
end
|
820
857
|
end
|
metadata
CHANGED
@@ -1,61 +1,56 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: clogger
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 1
|
9
|
-
- 0
|
10
|
-
version: 1.1.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- cloggers
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-11-06 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: rack
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
- 9
|
32
|
-
version: "0.9"
|
18
|
+
requirements:
|
19
|
+
- - ! '>'
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0.9'
|
33
22
|
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: wrongdoc
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
25
|
none: false
|
40
|
-
requirements:
|
26
|
+
requirements:
|
27
|
+
- - ! '>'
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.9'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: wrongdoc
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
41
35
|
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
segments:
|
45
|
-
- 1
|
46
|
-
- 0
|
47
|
-
version: "1.0"
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '1.0'
|
48
38
|
type: :development
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '1.0'
|
46
|
+
description: ! '\Clogger is Rack middleware for logging HTTP requests. The log format
|
47
|
+
|
48
|
+
is customizable so you can specify exactly which fields to log.'
|
53
49
|
email: clogger@librelist.org
|
54
50
|
executables: []
|
55
|
-
|
56
|
-
extensions:
|
51
|
+
extensions:
|
57
52
|
- ext/clogger_ext/extconf.rb
|
58
|
-
extra_rdoc_files:
|
53
|
+
extra_rdoc_files:
|
59
54
|
- README
|
60
55
|
- NEWS
|
61
56
|
- ChangeLog
|
@@ -65,7 +60,7 @@ extra_rdoc_files:
|
|
65
60
|
- ext/clogger_ext/clogger.c
|
66
61
|
- LICENSE
|
67
62
|
- LATEST
|
68
|
-
files:
|
63
|
+
files:
|
69
64
|
- .document
|
70
65
|
- .gitignore
|
71
66
|
- .manifest
|
@@ -95,41 +90,33 @@ files:
|
|
95
90
|
- test/test_clogger_to_path.rb
|
96
91
|
homepage: http://clogger.rubyforge.org/
|
97
92
|
licenses: []
|
98
|
-
|
99
93
|
post_install_message:
|
100
|
-
rdoc_options:
|
94
|
+
rdoc_options:
|
101
95
|
- -t
|
102
96
|
- \Clogger - configurable request logging for Rack
|
103
97
|
- -W
|
104
98
|
- http://bogomips.org/clogger.git/tree/%s
|
105
|
-
require_paths:
|
99
|
+
require_paths:
|
106
100
|
- lib
|
107
101
|
- ext
|
108
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
103
|
none: false
|
110
|
-
requirements:
|
111
|
-
- -
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
|
114
|
-
|
115
|
-
- 0
|
116
|
-
version: "0"
|
117
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ! '>='
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
109
|
none: false
|
119
|
-
requirements:
|
120
|
-
- -
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
|
123
|
-
segments:
|
124
|
-
- 0
|
125
|
-
version: "0"
|
110
|
+
requirements:
|
111
|
+
- - ! '>='
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
126
114
|
requirements: []
|
127
|
-
|
128
115
|
rubyforge_project: clogger
|
129
|
-
rubygems_version: 1.8.
|
116
|
+
rubygems_version: 1.8.23
|
130
117
|
signing_key:
|
131
118
|
specification_version: 3
|
132
119
|
summary: configurable request logging for Rack
|
133
|
-
test_files:
|
120
|
+
test_files:
|
134
121
|
- test/test_clogger.rb
|
135
122
|
- test/test_clogger_to_path.rb
|