[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]