Class: Logging::Appenders::Email

Inherits:
Logging::Appender show all
Includes:
Buffering
Defined in:
lib/logging/appenders/email.rb

Overview

Provides an appender that can send log messages via email to a list of recipients.

Constant Summary

Constants included from Buffering

Buffering::DEFAULT_BUFFER_SIZE

Instance Attribute Summary collapse

Attributes included from Buffering

#auto_flushing, #buffer, #flush_period

Attributes inherited from Logging::Appender

#layout, #level, #name

Instance Method Summary collapse

Methods included from Buffering

#flush, #immediate_at=, #reopen

Methods inherited from Logging::Appender

#<<, #append, #closed?, #flush, #inspect, #reopen

Constructor Details

#initialize(name, opts = {}) ⇒ Email

call-seq:

Email.new( name, :from => '[email protected]', :to => '[email protected]', :subject => 'Whoops!' )

Create a new email appender that will buffer messages and then send them out in batches to the listed recipients. See the options below to configure how emails are sent through you mail server of choice. All the buffering options apply to the email appender.

The following options are required:

:from - The base filename to use when constructing new log
        filenames.
:to   - The list of email recipients either as an Array or a comma
        separated list.

The following options are optional:

:subject   - The subject line for the email.
:address   - Allows you to use a remote mail server. Just change it
             from its default "localhost" setting.
:port      - On the off chance that your mail server doesn't run on
             port 25, you can change it.
:domain    - If you need to specify a HELO domain, you can do it here.
:user_name - If your mail server requires authentication, set the user
             name in this setting.
:password  - If your mail server requires authentication, set the
             password in this setting.
:authentication - If your mail server requires authentication, you need
                  to specify the authentication type here. This is a
                  symbol and one of :plain (will send the password in
                  the clear), :login (will send password Base64
                  encoded) or :cram_md5 (combines a Challenge/Response
                  mechanism to exchange information and a cryptographic
                  Message Digest 5 algorithm to hash important
                  information)
:enable_starttls_auto - When set to true, detects if STARTTLS is
                        enabled in your SMTP server and starts to use it.

Example:

Setup an email appender that will buffer messages for up to 1 minute, and only send messages for ERROR and FATAL messages. This example uses Google’s SMTP server with authentication to send out messages.

Logger.appenders.email( 'email',
    :from       => "[email protected]",
    :to         => "[email protected]",
    :subject    => "Application Error [#{%x(uname -n).strip}]",

    :address    => "smtp.google.com",
    :port       => 443,
    :domain     => "google.com",
    :user_name  => "example",
    :password   => "12345",
    :authentication => :plain,
    :enable_starttls_auto => true,

    :auto_flushing => 200,     # send an email after 200 messages have been buffered
    :flush_period  => 60,      # send an email after one minute
    :level         => :error   # only process log events that are "error" or "fatal"
)

Raises:

  • (ArgumentError)


86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/logging/appenders/email.rb', line 86

def initialize( name, opts = {} )
  opts[:header] = false
  super(name, opts)

  af = opts.getopt(:buffsize) ||
       opts.getopt(:buffer_size) ||
       100
  configure_buffering({:auto_flushing => af}.merge(opts))

  # get the SMTP parameters
  self.from = opts.getopt :from
  raise ArgumentError, 'Must specify from address' if @from.nil?

  self.to = opts.getopt :to
  raise ArgumentError, 'Must specify recipients' if @to.empty?

  self.subject   = opts.getopt :subject, "Message from #{$0}"
  self.address   = opts.getopt(:server) || opts.getopt(:address) || 'localhost'
  self.port      = opts.getopt(:port, 25)
  self.domain    = opts.getopt(:domain, ENV['HOSTNAME']) || 'localhost.localdomain'
  self.user_name = opts.getopt(:acct) || opts.getopt(:user_name)
  self.password  = opts.getopt(:passwd) || opts.getopt(:password)
  self.enable_starttls_auto = opts.getopt(:enable_starttls_auto, false)
  self.authentication = opts.getopt(:authtype) || opts.getopt(:authentication) || :plain
end

Instance Attribute Details

#addressObject

Returns the value of attribute address.



21
22
23
# File 'lib/logging/appenders/email.rb', line 21

def address
  @address
end

#authenticationObject

Returns the value of attribute authentication.



20
21
22
# File 'lib/logging/appenders/email.rb', line 20

def authentication
  @authentication
end

#domainObject

Returns the value of attribute domain.



21
22
23
# File 'lib/logging/appenders/email.rb', line 21

def domain
  @domain
end

#enable_starttls_autoObject

Returns the value of attribute enable_starttls_auto.



22
23
24
# File 'lib/logging/appenders/email.rb', line 22

def enable_starttls_auto
  @enable_starttls_auto
end

#fromObject

Returns the value of attribute from.



21
22
23
# File 'lib/logging/appenders/email.rb', line 21

def from
  @from
end

#passwordObject

Returns the value of attribute password.



22
23
24
# File 'lib/logging/appenders/email.rb', line 22

def password
  @password
end

#portObject

Returns the value of attribute port.



20
21
22
# File 'lib/logging/appenders/email.rb', line 20

def port
  @port
end

#subjectObject

Returns the value of attribute subject.



21
22
23
# File 'lib/logging/appenders/email.rb', line 21

def subject
  @subject
end

#toObject

Returns the value of attribute to.



20
21
22
# File 'lib/logging/appenders/email.rb', line 20

def to
  @to
end

#user_nameObject

Returns the value of attribute user_name.



22
23
24
# File 'lib/logging/appenders/email.rb', line 22

def user_name
  @user_name
end

Instance Method Details

#close(*args) ⇒ Object

Close the email appender. If the layout contains a foot, it will not be sent as an email.



115
116
117
# File 'lib/logging/appenders/email.rb', line 115

def close( *args )
  super(false)
end