about summary refs log tree commit homepage
path: root/lib
DateCommit message (Collapse)
2010-12-25clogger 0.6.0 - :path shortcut, minor bugfixes v0.6.0
Clogger may now be initialized with a :path instead of :logger to avoid typing "::File" in config.ru files to avoid conflicting with the completely-unrelated Rack::File. $request_time is now uses the monotonic clock, making it immune to system clock changes. $usec and $msec statements were completely broken in the pure-Ruby code and now fixed. Rubinius is supported by the optional C extension as well, the pure-Ruby code always worked.
2010-12-25fix $msec and $usec in pure Ruby variant
It was totally broken but nobody uses uses it, so it went unnoticed since the beginning of time.
2010-12-24eliminate unnecessary freeze and dup
They're not needed and a waste of code.
2010-12-24accept a new :path argument in initialize
This lessens confusion for people configuring Clogger in config.ru, since "File" could be mistaken for Rack::File and "::File" needs to be specified.
2010-06-06clogger 0.5.0 - body.to_path forwarding v0.5.0
This release allows middleware like Rack::Contrib::Sendfile to work properly higher up the stack from Clogger. Certain configurations of the Rainbows! and Zbatery web servers are able to use the return value of body.to_path to serve static files efficiently (via IO.copy_stream under 1.9 or stream_file_data with EventMachine). There are some small cleanups and documentation improvements as well. I've relicensed to LGPLv2.1+ (from LGPLv3-only) to allow bundling with GPLv2-only applications (I'm currently the sole copyright holder). Signed-off-by: Eric Wong <normalperson@yhbt.net>
2010-06-06CLOGGER_PURE=0 disables the C ext
It's unintuitive that merely setting the environment variable to an empty string or zero would be a boolean true.
2010-06-06no point in using autoload for Rack
Rack is always used, and Rack itself uses autoload to save memory.
2010-06-06doc: RDoc cleanups, split out LICENSE file
2010-06-06pass-through body.to_path when wrapping the body
Certain configurations of Rainbows! (and Zbatery) are able to use the return value of body.to_path to serve static files more efficiently. This also allows middleware like Rack::Contrib::Sendfile to work properly higher up the stack, too.
2010-06-06when wrapping the body, body.close writes the log
We no longer write the log out at the end of the body.each call. This is a behavioral change, but fortunately all Rack servers I've seen call body.close inside an ensure. This allows us to later pass along the "to_path" method and not rely on "each" to write the log.
2010-04-21clogger 0.4.0 v0.4.0
Small cleanups and minor enhancements (mainly for the optional C extension) for this release: Eric Wong (10): ext: use FIX macros instead of generic NUM macros if possible ext: preserve subclasses of Rack::Utils::HeaderHash test: fix Linux memory usage test avoid direct require of "rack" to quiet warnings ext: GC safety fix when throwing an exception ext: eliminate unused variable ext: fix signedness and shadow warnings ext: sparse cleanups ext: avoid void pointer arithmetic clogger 0.4.0
2010-04-21avoid direct require of "rack" to quiet warnings
This quiets down warnings when used with RubyGems loaders such as Isolate and Bundler where the HTTP server already loaded Rack.
2010-02-13clogger 0.3.2 v0.3.2
This release fixes a memory leak in the optional C extension due to misuse of the Ruby C API. Users of the pure Ruby version are unaffected. We also misreleased 0.3.1 with this fix, but without bumping the Clogger::VERSION constant.
2010-02-09clogger 0.3.0 v0.3.0
You may now force the :reentrant flag to +true+ or +false+ in your Rack configuration file: use Clogger, :format => Clogger::Format::Combined, :logger => ::File.open("/path/to/log", "ab"), :reentrant => true This is to be compatible with Rack servers that do not use use events or Fibers for concurrency instead of threads. By default, reentrancy is enabled if env["rack.multithread"] is true, but "rack.multithread" cannot indicative of a reentrancy requirement in a web server.
2010-02-08Allow :reentrant flag to be forced true/false
Clogger may set this value independently of "rack.multithread" since Actor/Fiber-based servers may have multiple instances of Clogger wrapping different response bodies and yet be incompatible with "rack.multithread"
2010-01-06clogger 0.2.0 v0.2.0
The optional C extension no longer tries to preserve the original response array as it could become subtly broken by people using non-frozen but constant responses. For the pure Ruby version, there is a 1.9-encoding bugfix for response size calculation.
2010-01-06pure: use Rack::Utils.bytesize instead of String#size
hacking the C extension with RSTRING_LEN() is so much easier :P
2010-01-06pure: avoid unnecessary method dispatches
instance variable lookups are expensive as-is
2009-10-06clogger 0.1.0 v0.1.0
This release should help ensure compatibility with a to-be-released version of Rack::Lint that allows subclasses of the core String and Hash objects for users of the optional C extension. Eric Wong (6): ext: convert non-Hashes #to_hash if possible ext: ensure all objects we byte_xs are Strings tests for subclassing gemspec: disable the license= field for older RubyGems GNUmakefile: fix grammar FAIL in comment cleanup packaging and website/rdoc
2009-09-09clogger 0.0.7 v0.0.7
We now properly handle bodies that do not respond to the :close method. Additionally there small documentation/formatting fixes.
2009-09-09handle bodies that do not respond to :close
Since the wrapped Clogger object always responds to close, we cannot blindly delegate the close method to the body without ensuring it can be closed. So ensure that it can be closed before attempting to close it, all return values and errors are trapped and returned. Reported-by: Iñaki Baz Castillo
2009-09-07clogger 0.0.6 v0.0.6
"clogger_ext" is no longer a separate gem, but merged into the "clogger" gem itself. The installation should automatically detect compatible versions of Ruby and only build the C extension for MRI 1.8/1.9. Rack::Utils::HeaderHash is now used for $sent_http_* variable lookups instead of a hand-rolled solution. HeaderHash objects should be reusable in Rack soon to avoid the penalty of recreating them repeatedly in middlewares and hopefully more-widely used as a result. Underlying logger objects are sync=true for safety reasons. This has always been the case for the C extension version when writing to regular files. Other small changes include more CGI variables and the :ORS (output record separator) option added (default: "\n").
2009-09-07Don't bother creating HeaderHash unless we need it
It's expensive to create if not needed, and no current released version of Rack has my proposed optimizations for it yet...
2009-09-04use Rack::Utils::HeaderHash for $sent_http_* lookups
No point in having extra code to do case-insensitive lookups, especially since the HeaderHash implementation is already in wide use and will only get faster as time goes by.
2009-09-03add support for several more CGI variables
$auth_type, $gateway_interface, $server_software, $path_translated are all supported now.
2009-09-03add output record separator option (:ORS)
This allows overriding the default of "\n". Behavior remains similar to IO#puts, the :ORS (output record separator) is appended iff the format doesn't already end with that string.
2009-09-03CLOGGER_PURE forces the pure version to be loaded
This is useful for testing the pure Ruby version in case clogger_ext is already installed on your system.
2009-09-03Ensure underlying logger objects are sync=true
Userspace buffering defaults are dangerous as the Ruby default IO objects do not do line-aware buffering. This makes the README examples with File.open much safer to use out-of-the-box for users of the pure-Ruby version. For users on the MRI C extension logging to regular files, this should not have any effect as we've optimized those to do unbuffered write(2) syscalls anyways.
2009-09-02clogger 0.0.5 v0.0.5
2009-09-02alias $http_content_{length,type} to $content_{length,type}
Since Rack doesn't allow the HTTP_CONTENT_{LENGTH,TYPE} headers, alias attempts to use those to the non-"HTTP_"-prefixed equivalents to avoid confusion on the user side (nginx also does this).
2009-09-02expose the $content_length/$content_type variables
Since the HTTP_CONTENT_LENGTH and HTTP_CONTENT_TYPE variables are not allowed by Rack, we need to allow access to the CGI variables instead.
2009-09-02expose $request_method as documented in the README
Accessing "REQUEST_METHOD" in the Rack env should be doable as a CGI-ish variable. Thanks to Iñaki Baz Castillo for spotting the issue and reporting it to me.
2009-09-02clogger 0.0.4 v0.0.4
2009-09-01correctly rebuild simple HTTP/0.9 GET requests
Back in HTTP/0.9 days (before it was called HTTP/0.9), "GET /uri/goes/here\r\n" was a valid HTTP request. See rfc 1945, section 4.1 for details on this ancient "Simple-Request" scheme used by HTTP/0.9 clients.
2009-09-01Ensure hex escaping is done in uppercase
The pure variant was using lower-case output instead of upper case, the ext variant was actually fine in this case. This is for nginx output format compatibility.
2009-09-01ext: ensure headers#each in response is valid
We're not Rack::Lint, but we still need to take steps to avoid segfaulting if we host non-Rack::Lint-compliant applications. This also updates the pure variant to fail on bad applications, too.
2009-08-29clogger 0.0.3 v0.0.3
2009-08-29clogger 0.0.2 v0.0.2
2009-08-29Log bad/invalid app responses as 500 errors
Some misbehaved apps can do this to us, and we don't want the C extension to segfault when this happens.
2009-08-29support "$request_uri" as a log variable
This was documented in the README but never implemented. Some popular web servers set REQUEST_URI even though it's not required by Rack, so allow this variable to be used if possible. As a side effect, it is also less likely to be modified by certain handlers (*cough*Rails::Rack::Static*cough*).
2009-08-28initial import