= EmailOutputter This is an experimental class that sends a number of formatted log events as an RFC 822 email. It should work fine if Net:SMTP doesn't cause any problems. Just in case, create a logger named 'log4r' and give it an outputter to see the logging statements made by this class. If it fails to send email, it will set itself to OFF and stop logging. In order to use it, require 'log4r/outputter/emailoutputter' == SMTP Configuration All arguments to Net::SMTP.start are supported. Pass them as hash parameters to +new+. The to field is specified as a comma-delimited list of emails (padded with \s* if desired). An example: email_out = EmailOutputter.new 'email_out', :server=>'localhost', :port=>25, :domain=>'somewhere.com', :from=>'me@foo.bar', :to=>'them@foo.bar, me@foo.bar, bozo@clown.net', :subject=>'Log Report' == LogEvent Buffer EmailOutputter stores log messages in a buffer. When the buffer reaches a certain number, the buffsize, it will send an email containing the contents of the buffer. The default +buffsize+ is 100. To set +buffsize+, email_out.buffsize = 1000 # set the buffsize to 1000 == Flush To Send Email Flushing an EmailOutputter will mail out all the remaining LogEvents. This is convenient for systems that encapsulate the shutdown process. It's a good idea to do this for all outputters, Outputter.each_outputter {|o| o.flush} Alternatively, one can invoke flush on the outputter directly, email_out.flush It's also a good idea to notify the recepient of the email that the system is shutting down. Before flushing, log a message to the owner of this outputter, log_with_email_out.info "The system is shutting down at #{Time.now}" == Format When? LogEvents may either be formatted as they come in or as the email is being composed. To do the former, specify a value of +true+ to the hash parameter +formatfirst+. The default is to format during email composition. email_out.formatfirst = true # format as soon as LogEvents are received == Immediate Notification EmailOutputter can be configured to flush and send the email whenever the logger sees a certain log priority. Use the +immediate_at+ hash parameter and specify the levels as a comma-delimited list (like an XML element). To trigger an email on FATAL and ERROR, email_out.immediate_at = "FATAL, ERROR" == Example A security logger sends email to several folks, buffering up to 25 log events and sending immediates on CRIT and WARN EmailOutputter.new 'security', :to => 'bob@secure.net, frank@secure.net', :buffsize => 25, :immediate_at => 'WARN, CRIT' == XML Configuration See log4r/configurator.rb for details. Here's an example: WARN, CRIT localhost me@secure.net bob@secure.net, frank@secure.net ... == To Do This class could use some sophistication, in particular a means to compress the logs, a way to set the subject dynamically (probably via a block method), and a time trigger. When the time trigger is introduced, a +buffsize+ of 0 should mean ignore +buffsize+ to determine when to send the email.