From 78ae5ef9c7e8c9410f18063bcb130e70666a0489 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Fri, 11 Dec 2009 16:40:57 -0600 Subject: Simple rack logger middleware that wraps rack.errors --- lib/rack.rb | 1 + lib/rack/logger.rb | 20 ++++++++++++++++++++ test/spec_rack_logger.rb | 21 +++++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 lib/rack/logger.rb create mode 100644 test/spec_rack_logger.rb diff --git a/lib/rack.rb b/lib/rack.rb index 3d8e8ed8..6bdb878f 100644 --- a/lib/rack.rb +++ b/lib/rack.rb @@ -40,6 +40,7 @@ module Rack autoload :Head, "rack/head" autoload :Lint, "rack/lint" autoload :Lock, "rack/lock" + autoload :Logger, "rack/logger" autoload :MethodOverride, "rack/methodoverride" autoload :Mime, "rack/mime" autoload :NullLogger, "rack/nulllogger" diff --git a/lib/rack/logger.rb b/lib/rack/logger.rb new file mode 100644 index 00000000..d67d8ce2 --- /dev/null +++ b/lib/rack/logger.rb @@ -0,0 +1,20 @@ +require 'logger' + +module Rack + # Sets up rack.logger to write to rack.errors stream + class Logger + def initialize(app, level = ::Logger::INFO) + @app, @level = app, level + end + + def call(env) + logger = ::Logger.new(env['rack.errors']) + logger.level = @level + + env['rack.logger'] = logger + @app.call(env) + ensure + logger.close + end + end +end diff --git a/test/spec_rack_logger.rb b/test/spec_rack_logger.rb new file mode 100644 index 00000000..d55b9c77 --- /dev/null +++ b/test/spec_rack_logger.rb @@ -0,0 +1,21 @@ +require 'rack/logger' +require 'rack/lint' +require 'stringio' + +context "Rack::Logger" do + specify "logs to rack.errors" do + app = lambda { |env| + log = env['rack.logger'] + log.debug("Created logger") + log.info("Program started") + log.warn("Nothing to do!") + + [200, {'Content-Type' => 'text/plain'}, ["Hello, World!"]] + } + + errors = StringIO.new + Rack::Logger.new(app).call({'rack.errors' => errors}) + errors.string.should.match "INFO -- : Program started" + errors.string.should.match "WARN -- : Nothing to do" + end +end -- cgit v1.2.3-24-ge0c7