108 lines
2.6 KiB
ReStructuredText
108 lines
2.6 KiB
ReStructuredText
|
|
Logging to Email
|
|
================
|
|
|
|
It's possible to configure logging such that when "errors" are logged,
|
|
an email can be sent to some recipient(s).
|
|
|
|
You can set this up however you like of course; see upstream docs for
|
|
more info:
|
|
|
|
* :doc:`python:library/logging`
|
|
* :ref:`python:smtp-handler`
|
|
|
|
But the example shown below does as follows:
|
|
|
|
* root logger is DEBUG+ and uses 3 handlers: file, console, email
|
|
|
|
* file handler
|
|
|
|
* writes to ``app/log/wutta.log`` (you should specify absolute path instead)
|
|
|
|
* will auto-rotate log file when size reaches 10MB
|
|
|
|
* uses "generic" entry formatter
|
|
|
|
* console handler
|
|
|
|
* writes to STDERR for the current process
|
|
|
|
* writes only INFO+ entries (so no DEBUG)
|
|
|
|
* uses "console" entry formatter
|
|
|
|
* email handler
|
|
|
|
* writes only ERROR+ entries (so no DEBUG, INFO or WARNING)
|
|
|
|
* email is From: sender and To: recip(s) with Subject: as shown
|
|
|
|
* uses "generic" entry formatter (for message body)
|
|
|
|
.. note::
|
|
|
|
This will *not* send email when "uncaught exceptions" occur. This
|
|
will only send email when an error is *logged*. For example::
|
|
|
|
import logging
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
log.debug("do not email this")
|
|
log.info("nor this")
|
|
log.warning("nor this")
|
|
|
|
log.error("but *do* email this")
|
|
|
|
try:
|
|
raise RuntimeError
|
|
except:
|
|
log.exception("this also gets emailed")
|
|
|
|
# nb. no email is sent *here*, although possibly further up the
|
|
# stack another try/except block could be setup to log uncaught
|
|
# errors, in which case email may still be sent.
|
|
raise RuntimeError("this will just raise up the stack")
|
|
|
|
Now here is the example, which can be added to a normal :term:`config
|
|
file` (modifying as needed):
|
|
|
|
.. code-block:: ini
|
|
|
|
[loggers]
|
|
keys = root
|
|
|
|
[handlers]
|
|
keys = file, console, email
|
|
|
|
[formatters]
|
|
keys = generic, console
|
|
|
|
[logger_root]
|
|
handlers = file, console, email
|
|
level = DEBUG
|
|
|
|
[handler_file]
|
|
class = handlers.RotatingFileHandler
|
|
args = ('app/log/wutta.log', 'a', 1000000, 100, 'utf_8')
|
|
formatter = generic
|
|
|
|
[handler_console]
|
|
class = StreamHandler
|
|
args = (sys.stderr,)
|
|
formatter = console
|
|
level = INFO
|
|
|
|
[handler_email]
|
|
class = handlers.SMTPHandler
|
|
args = ('localhost', 'poser@localhost', ['root@localhost', 'other@localhost'], "[Poser] Logging")
|
|
formatter = generic
|
|
level = ERROR
|
|
|
|
[formatter_generic]
|
|
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(funcName)s: %(message)s
|
|
datefmt = %Y-%m-%d %H:%M:%S
|
|
|
|
[formatter_console]
|
|
format = %(levelname)-5.5s [%(name)s][%(threadName)s] %(funcName)s: %(message)s
|