ruby-changes:24987
From: knu <ko1@a...>
Date: Thu, 27 Sep 2012 18:22:16 +0900 (JST)
Subject: [ruby-changes:24987] knu:r37039 (trunk): * ext/syslog/lib/syslog/logger.rb: add a formatter to the
knu 2012-09-27 18:20:58 +0900 (Thu, 27 Sep 2012) New Revision: 37039 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37039 Log: * ext/syslog/lib/syslog/logger.rb: add a formatter to the Syslog::Logger object. [Bug #7065] * test/syslog/test_syslog_logger.rb: ditto. Modified files: trunk/ChangeLog trunk/ext/syslog/lib/syslog/logger.rb trunk/test/syslog/test_syslog_logger.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 37038) +++ ChangeLog (revision 37039) @@ -1,3 +1,9 @@ +Thu Sep 27 18:12:20 2012 Aaron Patterson <aaron@t...> + + * ext/syslog/lib/syslog/logger.rb: add a formatter to the + Syslog::Logger object. [Bug #7065] + * test/syslog/test_syslog_logger.rb: ditto. + Wed Sep 26 16:39:57 2012 Koichi Sasada <ko1@a...> * insns.def: add new instruction `opt_empty_p' for optimize `empty?' Index: ext/syslog/lib/syslog/logger.rb =================================================================== --- ext/syslog/lib/syslog/logger.rb (revision 37038) +++ ext/syslog/lib/syslog/logger.rb (revision 37039) @@ -37,7 +37,24 @@ # newsyslog.conf(5) and newsyslog(8) man pages. class Syslog::Logger + # Default formatter for log messages. + class Formatter + def call severity, time, progname, msg + clean msg + end + private + + ## + # Clean up messages so they're nice and pretty. + + def clean message + message = message.to_s.strip + message.gsub!(/\e\[[0-9;]*m/, '') # remove useless ansi color codes + return message + end + end + ## # The version of Syslog::Logger you are using. @@ -136,6 +153,20 @@ attr_accessor :level + # Logging formatter, as a +Proc+ that will take four arguments and + # return the formatted message. The arguments are: + # + # +severity+:: The Severity of the log message. + # +time+:: A Time instance representing when the message was logged. + # +progname+:: The #progname configured, or passed to the logger method. + # +msg+:: The _Object_ the user passed to the log message; not necessarily a + # String. + # + # The block should return an Object that can be written to the logging + # device via +write+. The default formatter is used when no formatter is + # set. + attr_accessor :formatter + ## # Fills in variables for Logger compatibility. If this is the first # instance of Syslog::Logger, +program_name+ may be set to change the logged @@ -145,6 +176,7 @@ def initialize program_name = 'ruby' @level = ::Logger::DEBUG + @formatter = Formatter.new @@syslog ||= Syslog.open(program_name) end @@ -155,20 +187,8 @@ def add severity, message = nil, progname = nil, &block severity ||= ::Logger::UNKNOWN @level <= severity and - @@syslog.log LEVEL_MAP[severity], '%s', clean(message || block.call) + @@syslog.log LEVEL_MAP[severity], '%s', formatter.call(severity, Time.now, progname, (message || block.call)) true end - - private - - ## - # Clean up messages so they're nice and pretty. - - def clean message - message = message.to_s.strip - message.gsub!(/\e\[[0-9;]*m/, '') # remove useless ansi color codes - return message - end - end Index: test/syslog/test_syslog_logger.rb =================================================================== --- test/syslog/test_syslog_logger.rb (revision 37038) +++ test/syslog/test_syslog_logger.rb (revision 37039) @@ -29,7 +29,7 @@ end def log(level, format, *args) - @line = "#{LEVEL_LABEL_MAP[level]} - \#{format % args}" + @line = "#{LEVEL_LABEL_MAP[level]} - #{format % args}" end attr_reader :line @@ -92,6 +92,16 @@ assert_equal Logger::DEBUG, @logger.level end + def test_custom_formatter + @logger.formatter = Class.new { + def call severity, time, progname, msg + "hi mom!" + end + }.new + + assert_match(/hi mom!/, log_raw(:fatal, 'fatal level message')) + end + def test_add msg = log_add nil, 'unknown level message' # nil == unknown assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/