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 48 48 assert_match(/D, \[\d\d\d\d-\d\d-\d\d#\d+\] DEBUG -- : debug/, @out.string) 49 49 end 50 50 end 51 52 class CleanLogger_182_to_183_Test < Test::Unit::TestCase53 def setup54 silence_warnings do55 if Logger.method_defined?(:formatter=)56 Logger.send(:alias_method, :hide_formatter=, :formatter=)57 Logger.send(:undef_method, :formatter=)58 else59 Logger.send(:define_method, :formatter=) { }60 end61 load File.dirname(__FILE__) + '/../lib/active_support/clean_logger.rb'62 end63 64 @out = StringIO.new65 @logger = Logger.new(@out)66 @logger.progname = 'CLEAN LOGGER TEST'67 end68 69 def teardown70 silence_warnings do71 if Logger.method_defined?(:hide_formatter=)72 Logger.send(:alias_method, :formatter=, :hide_formatter=)73 else74 Logger.send(:undef_method, :formatter=)75 end76 load File.dirname(__FILE__) + '/../lib/active_support/clean_logger.rb'77 end78 end79 80 # Since we've fooled Logger into thinking we're on 1.8.2 if we're on 1.8.381 # and on 1.8.3 if we're on 1.8.2, it'll define format_message with the82 # wrong order of arguments and therefore print progname instead of msg.83 def test_format_message_with_faked_version84 @logger.error 'error'85 assert_equal "CLEAN LOGGER TEST\n", @out.string86 end87 end -
lib/active_support/clean_logger.rb
old new 44 44 formatter.datetime_format if formatter.respond_to?(:datetime_format) 45 45 end 46 46 47 alias :old_formatter :formatter 47 alias :old_formatter :formatter if method_defined?(:formatter) 48 48 # Get the current formatter. The default formatter is a SimpleFormatter which only 49 49 # displays the log message 50 50 def formatter 51 51 @formatter ||= SimpleFormatter.new 52 52 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 53 91 54 92 # Simple formatter which only displays the message. 55 93 class SimpleFormatter < Logger::Formatter … … 74 112 def format_message(severity, timestamp, msg, progname) 75 113 formatter.call(severity, timestamp, progname, msg) 76 114 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 77 124 end 78 125 end