clogger 0.0.4 → 0.0.5
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.
- data/History.txt +9 -0
- data/README.txt +8 -3
- data/lib/clogger.rb +5 -2
- data/test/test_clogger.rb +32 -0
- metadata +1 -1
data/History.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
=== 0.0.5 / 2009-09-02
|
2
|
+
|
3
|
+
The following variables are now exposed: $request_method,
|
4
|
+
$content_length and $content_type. Additionally, attempts
|
5
|
+
to use $http_content_length or $http_content_type will be
|
6
|
+
remapped to use the non-"$http_"-prefixed variable instead
|
7
|
+
since the "$http_"-variants of those variables is not allowed
|
8
|
+
by Rack.
|
9
|
+
|
1
10
|
=== 0.0.4 / 2009-09-02
|
2
11
|
|
3
12
|
The pure Ruby version now escapes with uppercase A-F
|
data/README.txt
CHANGED
@@ -14,13 +14,14 @@ is customizable so you can specify exactly which fields to log.
|
|
14
14
|
|
15
15
|
* pre-defines Apache Common Log Format, Apache Combined Log Format and
|
16
16
|
Rack::CommonLogger (as distributed by Rack 1.0) formats.
|
17
|
+
See Clogger::Format for the predefined formats.
|
17
18
|
|
18
19
|
* Untrusted values are escaped (all HTTP headers, request URI components)
|
19
20
|
to make life easier for HTTP log parsers. The following bytes are escaped:
|
20
21
|
|
21
22
|
' (single quote)
|
22
23
|
" (double quote)
|
23
|
-
all bytes in the range of \x00-\
|
24
|
+
all bytes in the range of \x00-\x1F
|
24
25
|
|
25
26
|
== SYNOPSIS
|
26
27
|
|
@@ -43,6 +44,10 @@ somewhere inside the "Rails::Initializer.run do |config|" block:
|
|
43
44
|
|
44
45
|
* $http_* - HTTP request headers (e.g. $http_user_agent)
|
45
46
|
* $sent_http_* - HTTP response headers (e.g. $sent_http_content_length)
|
47
|
+
* $content_length - HTTP request body size
|
48
|
+
($http_content_length is not allowed by Rack)
|
49
|
+
* $content_type - HTTP request content type
|
50
|
+
($http_content_type is not allowed by Rack)
|
46
51
|
* $cookie_* - HTTP request cookie (e.g. $cookie_session_id)
|
47
52
|
Rack::Request#cookies must have been used by the underlying application
|
48
53
|
to parse the cookies into a hash.
|
@@ -54,8 +59,8 @@ somewhere inside the "Rails::Initializer.run do |config|" block:
|
|
54
59
|
($request_method $request_uri $http_version)
|
55
60
|
* $request_time, $request_time{PRECISION} - time taken for request
|
56
61
|
(including response body iteration). PRECISION defaults to 3
|
57
|
-
(milliseconds) if not specified but may be specified
|
58
|
-
6(microseconds).
|
62
|
+
(milliseconds) if not specified but may be specified anywhere from
|
63
|
+
0(seconds) to 6(microseconds).
|
59
64
|
* $time_local, $time_local{FORMAT} - current local time, FORMAT defaults to
|
60
65
|
"%d/%b/%Y:%H:%M:%S %z" but accepts any strftime(3)-compatible format
|
61
66
|
* $time_utc, $time_utc{FORMAT} - like $time_local, except with UTC
|
data/lib/clogger.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- encoding: binary -*-
|
2
2
|
class Clogger
|
3
|
-
VERSION = '0.0.
|
3
|
+
VERSION = '0.0.5'
|
4
4
|
|
5
5
|
OP_LITERAL = 0
|
6
6
|
OP_REQUEST = 1
|
@@ -19,6 +19,8 @@ class Clogger
|
|
19
19
|
'$time_local' => '$time_local{%d/%b/%Y:%H:%M:%S %z}',
|
20
20
|
'$msec' => '$time{3}',
|
21
21
|
'$usec' => '$time{6}',
|
22
|
+
'$http_content_length' => '$content_length',
|
23
|
+
'$http_content_type' => '$content_type',
|
22
24
|
}
|
23
25
|
|
24
26
|
SPECIAL_VARS = {
|
@@ -35,7 +37,8 @@ class Clogger
|
|
35
37
|
private
|
36
38
|
|
37
39
|
CGI_ENV = Regexp.new('\A\$(' <<
|
38
|
-
%w(
|
40
|
+
%w(request_method content_length content_type
|
41
|
+
remote_addr remote_ident remote_user
|
39
42
|
path_info query_string script_name
|
40
43
|
server_name server_port).join('|') << ')\z').freeze
|
41
44
|
|
data/test/test_clogger.rb
CHANGED
@@ -402,4 +402,36 @@ class TestClogger < Test::Unit::TestCase
|
|
402
402
|
assert_equal "GET /hello?goodbye=true\n", str.string
|
403
403
|
end
|
404
404
|
|
405
|
+
def test_request_method_only
|
406
|
+
str = StringIO.new
|
407
|
+
app = lambda { |env| [302, [ %w(a) ], []] }
|
408
|
+
cl = Clogger.new(app, :logger => str, :format => '$request_method')
|
409
|
+
cl.call(@req)
|
410
|
+
assert_equal "GET\n", str.string
|
411
|
+
end
|
412
|
+
|
413
|
+
def test_content_length_null
|
414
|
+
str = StringIO.new
|
415
|
+
app = lambda { |env| [302, [ %w(a) ], []] }
|
416
|
+
cl = Clogger.new(app, :logger => str, :format => '$content_length')
|
417
|
+
cl.call(@req)
|
418
|
+
assert_equal "-\n", str.string
|
419
|
+
end
|
420
|
+
|
421
|
+
def test_content_length_set
|
422
|
+
str = StringIO.new
|
423
|
+
app = lambda { |env| [302, [ %w(a) ], []] }
|
424
|
+
cl = Clogger.new(app, :logger => str, :format => '$content_length')
|
425
|
+
cl.call(@req.merge('CONTENT_LENGTH' => '5'))
|
426
|
+
assert_equal "5\n", str.string
|
427
|
+
end
|
428
|
+
|
429
|
+
def test_http_content_type_fallback
|
430
|
+
str = StringIO.new
|
431
|
+
app = lambda { |env| [302, [ %w(a) ], []] }
|
432
|
+
cl = Clogger.new(app, :logger => str, :format => '$http_content_type')
|
433
|
+
cl.call(@req.merge('CONTENT_TYPE' => 'text/plain'))
|
434
|
+
assert_equal "text/plain\n", str.string
|
435
|
+
end
|
436
|
+
|
405
437
|
end
|