diff options
-rw-r--r-- | lib/rack.rb | 1 | ||||
-rw-r--r-- | lib/rack/logger.rb | 20 | ||||
-rw-r--r-- | test/spec_rack_logger.rb | 21 |
3 files changed, 42 insertions, 0 deletions
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 |