Bug #7065 ยป syslog_formatter.patch
ChangeLog | ||
---|---|---|
Tue Sep 25 06:25:44 2012 Aaron Patterson <aaron@tenderlovemaking.com>
|
||
* ext/syslog/lib/syslog/logger.rb: add a formatter to the
|
||
Syslog::Logger object.
|
||
* test/syslog/test_syslog_logger.rb: corresponding test
|
||
Mon Sep 24 17:36:51 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||
* compile.c (defined_expr), insns.def (defined): share single frozen
|
ext/syslog/lib/syslog/logger.rb | ||
---|---|---|
# 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.
|
||
... | ... | |
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
|
||
... | ... | |
def initialize program_name = 'ruby'
|
||
@level = ::Logger::DEBUG
|
||
@formatter = Formatter.new
|
||
@@syslog ||= Syslog.open(program_name)
|
||
end
|
||
... | ... | |
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
|
||
test/syslog/test_syslog_logger.rb | ||
---|---|---|
end
|
||
def log(level, format, *args)
|
||
@line = "#{LEVEL_LABEL_MAP[level]} - \#{format % args}"
|
||
@line = "#{LEVEL_LABEL_MAP[level]} - #{format % args}"
|
||
end
|
||
attr_reader :line
|
||
... | ... | |
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
|