Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #8396: clean_logger.diff

File clean_logger.diff, 3.5 kB (added by mislav, 2 years ago)
  • test/clean_logger_test.rb

    old new  
    4848    assert_match(/D, \[\d\d\d\d-\d\d-\d\d#\d+\] DEBUG -- : debug/, @out.string) 
    4949  end 
    5050end 
    51  
    52 class CleanLogger_182_to_183_Test < Test::Unit::TestCase 
    53   def setup 
    54     silence_warnings do 
    55       if Logger.method_defined?(:formatter=) 
    56         Logger.send(:alias_method, :hide_formatter=, :formatter=) 
    57         Logger.send(:undef_method, :formatter=) 
    58       else 
    59         Logger.send(:define_method, :formatter=) { } 
    60       end 
    61       load File.dirname(__FILE__) + '/../lib/active_support/clean_logger.rb' 
    62     end 
    63  
    64     @out = StringIO.new 
    65     @logger = Logger.new(@out) 
    66     @logger.progname = 'CLEAN LOGGER TEST' 
    67   end 
    68  
    69   def teardown 
    70     silence_warnings do 
    71       if Logger.method_defined?(:hide_formatter=) 
    72         Logger.send(:alias_method, :formatter=, :hide_formatter=) 
    73       else 
    74         Logger.send(:undef_method, :formatter=) 
    75       end 
    76       load File.dirname(__FILE__) + '/../lib/active_support/clean_logger.rb' 
    77     end 
    78   end 
    79  
    80   # Since we've fooled Logger into thinking we're on 1.8.2 if we're on 1.8.3 
    81   # and on 1.8.3 if we're on 1.8.2, it'll define format_message with the 
    82   # wrong order of arguments and therefore print progname instead of msg. 
    83   def test_format_message_with_faked_version 
    84     @logger.error 'error' 
    85     assert_equal "CLEAN LOGGER TEST\n", @out.string 
    86   end 
    87 end 
  • lib/active_support/clean_logger.rb

    old new  
    4444    formatter.datetime_format if formatter.respond_to?(:datetime_format) 
    4545  end 
    4646   
    47   alias :old_formatter :formatter 
     47  alias :old_formatter :formatter if method_defined?(:formatter) 
    4848  # Get the current formatter. The default formatter is a SimpleFormatter which only 
    4949  # displays the log message 
    5050  def formatter 
    5151    @formatter ||= SimpleFormatter.new 
    5252  end 
     53 
     54  unless const_defined? :Formatter 
     55    class Formatter 
     56      Format = "%s, [%s#%d] %5s -- %s: %s\n" 
     57 
     58      attr_accessor :datetime_format 
     59 
     60      def initialize 
     61        @datetime_format = nil 
     62      end 
     63 
     64      def call(severity, time, progname, msg) 
     65        Format % [severity[0..0], format_datetime(time), $$, severity, progname, 
     66        msg2str(msg)] 
     67      end 
     68 
     69      private 
     70        def format_datetime(time) 
     71          if @datetime_format.nil? 
     72            time.strftime("%Y-%m-%dT%H:%M:%S.") << "%06d " % time.usec 
     73          else 
     74            time.strftime(@datetime_format) 
     75          end 
     76        end 
     77 
     78        def msg2str(msg) 
     79          case msg 
     80          when ::String 
     81            msg 
     82          when ::Exception 
     83            "#{ msg.message } (#{ msg.class })\n" << 
     84            (msg.backtrace || []).join("\n") 
     85          else 
     86            msg.inspect 
     87          end 
     88        end 
     89    end 
     90  end 
    5391   
    5492  # Simple formatter which only displays the message. 
    5593  class SimpleFormatter < Logger::Formatter 
     
    74112      def format_message(severity, timestamp, msg, progname) 
    75113        formatter.call(severity, timestamp, progname, msg) 
    76114      end 
     115       
     116      attr_writer :formatter 
     117      public :formatter= 
     118 
     119      alias old_format_datetime format_datetime 
     120      def format_datetime(datetime) datetime end 
     121 
     122      alias old_msg2str msg2str 
     123      def msg2str(msg) msg end 
    77124    end 
    78125end