$ git log --pretty=format:'%h %s (%cs)%d' v0.5.0 --
f60c24e clogger 0.5.0 - body.to_path forwarding (2010-06-06)
(tag: v0.5.0)
86699fa README: document CLOGGER_PURE environment variable (2010-06-06)
fac515b CLOGGER_PURE=0 disables the C ext (2010-06-06)
009760b ext: comment why we do what we do in to_path (2010-06-06)
41debb5 ext: the N in /dev/fd/N must be unsigned (2010-06-06)
cd76457 ext: handle weird regular files with O_NONBLOCK set (2010-06-06)
8794037 ext: cleanup -Wshadow warning (2010-06-06)
0de4a3d no point in using autoload for Rack (2010-06-06)
f4dd937 gemspec: update test files (2010-06-06)
52180f5 relicense as LGPLv2.1 or later (from LGPLv3) (2010-06-06)
...
$ git cat-file blob v0.5.0:README
= \Clogger - configurable request logging for Rack
== DESCRIPTION
\Clogger is Rack middleware for logging HTTP requests. The log format
is customizable so you can specify exactly which fields to log.
== FEATURES
* highly customizable with easy-to-read nginx-like log format variables.
* pre-defines Apache Common Log Format, Apache Combined Log Format and
Rack::CommonLogger (as distributed by Rack 1.0) formats.
See Clogger::Format for the predefined formats.
* Untrusted values are escaped (all HTTP headers, request URI components)
to make life easier for HTTP log parsers. The following bytes are escaped:
' (single quote)
" (double quote)
all bytes in the range of \x00-\x1F
* multi-instance capable and (optionally) reentrant. You can use
\Clogger in a multi-threaded server, and even multiple Cloggers logging
to different locations and different formats in the same process.
* Pure Ruby version for non-MRI versions of Ruby (or via CLOGGER_PURE=1
in the environment). The optional C extension is loaded by default
and supported under MRI 1.8.7, 1.9.1, and 1.9.2.
== SYNOPSIS
\Clogger may be loaded as Rack middleware in your config.ru:
# ENV['CLOGGER_PURE'] = '1' # uncomment to disable C extension
require "clogger"
use Clogger,
:format => Clogger::Format::Combined,
:logger => ::File.open("/path/to/log", "ab"),
:reentrant => true
run YourApplication.new
If you're using Rails 2.3.x or later, in your config/environment.rb
somewhere inside the "Rails::Initializer.run do |config|" block:
config.middleware.use 'Clogger',
:format => Clogger::Format::Combined,
:logger => ::File.open("/path/to/log", "ab"),
:reentrant => false
== VARIABLES
* $http_* - HTTP request headers (e.g. $http_user_agent)
* $sent_http_* - HTTP response headers (e.g. $sent_http_content_length)
* $content_length - HTTP request body size
($http_content_length is not allowed by Rack)
* $content_type - HTTP request content type
($http_content_type is not allowed by Rack)
* $cookie_* - HTTP request cookie (e.g. $cookie_session_id)
Rack::Request#cookies must have been used by the underlying application
to parse the cookies into a hash.
* $request_method - the HTTP request method (e.g. GET, POST, HEAD, ...)
* $path_info - path component requested (e.g. /index.html)
* $query_string - request query string (not including leading "?")
* $request_uri - the URI requested ($path_info?$query_string)
* $request - the first line of the HTTP request
($request_method $request_uri $http_version)
* $request_time, $request_time{PRECISION} - time taken for request
(including response body iteration). PRECISION defaults to 3
(milliseconds) if not specified but may be specified anywhere from
0(seconds) to 6(microseconds).
* $time_local, $time_local{FORMAT} - current local time, FORMAT defaults to
"%d/%b/%Y:%H:%M:%S %z" but accepts any strftime(3)-compatible format
* $time_utc, $time_utc{FORMAT} - like $time_local, except with UTC
* $usec - current time in seconds.microseconds since the Epoch
* $msec - current time in seconds.milliseconds since the Epoch
* $body_bytes_sent - bytes in the response body (Apache: %B)
* $response_length - body_bytes_sent, except "-" instead of "0" (Apache: %b)
* $remote_user - HTTP-authenticated user
* $remote_addr - IP of the requesting client socket
* $status - three-digit HTTP status code (e.g. 200, 404, 302)
* $ip - X-Forwarded-For request header if available, $remote_addr if not
* $pid - process ID of the current process
* $e{Thread.current} - Thread processing the request
* $e{Actor.current} - Actor processing the request (Revactor or Rubinius)
== REQUIREMENTS
* {Ruby}[http://ruby-lang.org/], {Rack}[http://rack.rubyforge.org/]
== DEVELOPMENT
The latest development happens in git and is published to the following:
git://git.bogomips.org/clogger.git
git://repo.or.cz/clogger.git
You may also browse and download snapshot tarballs:
* http://git.bogomips.org/cgit/clogger.git (cgit)
* http://repo.or.cz/w/clogger.git (gitweb)
The mailing list (see below) is central for coordination and
development. Patches should always be sent inline
(git format-patch -M + git send-email) so we can reply to them inline.
== CONTACT
All feedback (bug reports, user/development dicussion, patches, pull
requests) go to the mailing list.
* mailto:clogger@librelist.com
Do not send HTML mail or attachments. Do not top post.
Homepage: http://clogger.rubyforge.org/
== INSTALL
For Rubygems users:
gem install clogger
If you do not use Rubygems, you may also use setup.rb from the tarballs
on the Rubyforge project page:
* http://rubyforge.org/frs/?group_id=8896
There is an optional C extension that should be compatible with MRI
1.8/1.9. The extensions should automatically be disabled for users of
other Ruby implementations, but be sure to let us know if that's not the
case. No pre-built binaries are currently distributed, let us know if
you're interested in helping with the release/support effort.
# heads (aka `branches'):
$ git for-each-ref --sort=-creatordate refs/heads \
--format='%(HEAD) %(refname:short) %(subject) (%(creatordate:short))'
* master switch to TypedData macros for allocation (2024-02-01)
respond_to-priv SQUASH/WIP - use rb_funcallv to handle second respond_to arg (2017-05-21)
# tags:
$ git for-each-ref --sort=-creatordate refs/tags \
--format='%(refname:short) %(subject) (%(creatordate:short))'
v2.4.0 clogger 2.4.0 (2022-06-16) tar.gz
v2.3.1 clogger 2.3.1 (2021-05-25) tar.gz
v2.3.0 clogger 2.3.0 - $request_time{POWER,PRECISION} support (2020-08-10) tar.gz
v2.2.1 clogger 2.2.1 - move away from .org TLD (2020-01-08) tar.gz
v2.2.0 clogger v2.2.0 - Rack 2.x compatibility fix (2017-05-23) tar.gz
v2.1.0 clogger 2.1.0 - rack 2.x compatibility and more! (2016-07-28) tar.gz
v2.0.2 clogger 2.0.2 - bugfixes for pure Ruby users (2015-02-27) tar.gz
v2.0.1 clogger 2.0.1 - doc updates and new mailing list (2015-01-13) tar.gz
v2.0.0 clogger 2.0.0 - updated website URL, cleanups (2014-05-12) tar.gz
v1.4.0 clogger 1.4.0 - updated website URL, cleanups (2014-05-12) tar.gz
...
# associated public inboxes:
# (number on the left is used for dev purposes)
https://yhbt.net/clogger-public
git clone https://yhbt.net/clogger.git