From a7059e47d6015f7069a987550b6b027a7dbc6a34 Mon Sep 17 00:00:00 2001 From: Gary Gabriel Date: Thu, 30 Oct 2008 23:10:54 -0400 Subject: [PATCH] Add support for message formatting in BufferedLogger. --- .../lib/active_support/buffered_logger.rb | 10 +++++++++- activesupport/test/buffered_logger_test.rb | 13 +++++++++++++ 2 files changed, 22 insertions(+), 1 deletions(-) diff --git a/activesupport/lib/active_support/buffered_logger.rb b/activesupport/lib/active_support/buffered_logger.rb index 77e0b1d..40eab60 100644 --- a/activesupport/lib/active_support/buffered_logger.rb +++ b/activesupport/lib/active_support/buffered_logger.rb @@ -32,6 +32,7 @@ module ActiveSupport end attr_accessor :level + attr_accessor :formatter attr_reader :auto_flushing def initialize(log, level = DEBUG) @@ -40,6 +41,9 @@ module ActiveSupport @auto_flushing = 1 @guard = Mutex.new + # The default formatter returns the message unchanged. + @formatter = lambda { |severity_label, message| message } + if log.respond_to?(:write) @log = log elsif File.exist?(log) @@ -56,15 +60,19 @@ module ActiveSupport def add(severity, message = nil, progname = nil, &block) return if @level > severity message = (message || (block && block.call) || progname).to_s - # If a newline is necessary then create a new message ending with a newline. + # Format the message. # Ensures that the original message is not mutated. + message = @formatter.call(SEV_LABEL[severity], "#{message}") + # If a newline is necessary, then create a new message ending with a newline. message = "#{message}\n" unless message[-1] == ?\n buffer << message auto_flush message end + SEV_LABEL = {} for severity in Severity.constants + SEV_LABEL[Severity.const_get(severity)] = severity class_eval <<-EOT, __FILE__, __LINE__ def #{severity.downcase}(message = nil, progname = nil, &block) add(#{severity}, message, progname, &block) diff --git a/activesupport/test/buffered_logger_test.rb b/activesupport/test/buffered_logger_test.rb index 28dd343..99157c1 100644 --- a/activesupport/test/buffered_logger_test.rb +++ b/activesupport/test/buffered_logger_test.rb @@ -137,4 +137,17 @@ class BufferedLoggerTest < Test::Unit::TestCase assert @output.string.include?("a\nb\nc\n") assert @output.string.include?("x\ny\nz\n") end + + def test_default_formatter_should_not_alter_message + @logger.level = Logger::INFO + @logger.info @message + assert_equal "#{@message}\n", @output.string + end + + def test_should_format_output_with_formatter + @logger.level = Logger::INFO + @logger.formatter = lambda { |severity_label, message| "[#{severity_label}] #{message}" } + @logger.warn @message + assert_equal "[WARN] #{@message}\n", @output.string + end end -- 1.6.0.2