1 # Adds the 'around_level' method to Logger.
4 def self.define_around_helper(level
)
5 module_eval
<<-end_eval
6 def around_#{level}(before_message, after_message, &block) # def around_debug(before_message, after_message, &block)
7 self.#{level}(before_message) # self.debug(before_message)
8 return_value = block.call(self) # return_value = block.call(self)
9 self.#{level}(after_message) # self.debug(after_message)
10 return return_value # return return_value
14 [:debug, :info, :error, :fatal].each
{|level
| define_around_helper(level
) }
20 # Extensions to the built in Ruby logger.
22 # If you want to use the default log formatter as defined in the Ruby core, then you
23 # will need to set the formatter for the logger as in:
25 # logger.formatter = Formatter.new
27 # You can then specify the datetime format, for example:
29 # logger.datetime_format = "%Y-%m-%d"
31 # Note: This logger is deprecated in favor of ActiveSupport::BufferedLogger
35 # Set to false to disable the silencer
36 cattr_accessor
:silencer
39 # Silences the logger for the duration of the block.
40 def silence(temporary_level
= Logger
::ERROR)
43 old_logger_level
, self.level
= level
, temporary_level
46 self.level
= old_logger_level
53 alias :old_datetime_format= :datetime_format=
54 # Logging date-time format (string passed to +strftime+). Ignored if the formatter
55 # does not respond to datetime_format=.
56 def datetime_format
=(datetime_format
)
57 formatter
.datetime_format
= datetime_format
if formatter
.respond_to
?(:datetime_format=)
60 alias :old_datetime_format :datetime_format
61 # Get the logging datetime format. Returns nil if the formatter does not support
62 # datetime formatting.
64 formatter
.datetime_format
if formatter
.respond_to
?(:datetime_format)
67 alias :old_formatter :formatter if method_defined
?(:formatter)
68 # Get the current formatter. The default formatter is a SimpleFormatter which only
69 # displays the log message
71 @formatter ||= SimpleFormatter
.new
74 unless const_defined
? :Formatter
76 Format
= "%s, [%s#%d] %5s -- %s: %s\n"
78 attr_accessor
:datetime_format
81 @datetime_format = nil
84 def call(severity
, time
, progname
, msg
)
85 Format
% [severity
[0..0], format_datetime(time
), $$
, severity
, progname
,
90 def format_datetime(time
)
91 if @datetime_format.nil?
92 time
.strftime("%Y-%m-%dT%H:%M:%S.") << "%06d " % time
.usec
94 time
.strftime(@datetime_format)
103 "#{ msg.message } (#{ msg.class })\n" <<
104 (msg
.backtrace
|| []).join("\n")
112 # Simple formatter which only displays the message.
113 class SimpleFormatter
< Logger
::Formatter
114 # This method is invoked when a log event occurs
115 def call(severity
, timestamp
, progname
, msg
)
116 "#{String === msg ? msg : msg.inspect}\n"
121 alias old_format_message format_message
123 # Ruby 1.8.3 transposed the msg and progname arguments to format_message.
124 # We can't test RUBY_VERSION because some distributions don't keep Ruby
125 # and its standard library in sync, leading to installations of Ruby 1.8.2
126 # with Logger from 1.8.3 and vice versa.
127 if method_defined
?(:formatter=)
128 def format_message(severity
, timestamp
, progname
, msg
)
129 formatter
.call(severity
, timestamp
, progname
, msg
)
132 def format_message(severity
, timestamp
, msg
, progname
)
133 formatter
.call(severity
, timestamp
, progname
, msg
)
136 attr_writer
:formatter
139 alias old_format_datetime format_datetime
140 def format_datetime(datetime
) datetime
end
142 alias old_msg2str msg2str
143 def msg2str(msg
) msg
end