ANN: Logging Package v0.4.7 released
Vinay Sajip
vinay_sajip@yahoo.co.uk
14 Nov 2002 16:56:54 -0800
A new version of the proposed Python standard logging package (as per
PEP 282) has been released.
What Does It Do?
================
The logging package offers the ability for any Python program to log
events which occur during program execution. It's typically used to
provide application diagnostics, warnings and error messages. In
addition to capturing "what happened", "where it happened", "when it
happened", "how important it is" and event specific data, you can
configure, without changing the application source code, both the
verbosity of logging and the routing of events to different
destinations such as console, disk files, sockets, email addresses,
Web servers, SOAP servers etc. etc. You can even change the
configuration of a running program without stopping and restarting it!
You can use the logging package in exception handlers, and it will
include traceback information in the log. It's thread-safe, and very
easy to use - just "import logging" and log away! Classes provided
include:
Logger - used to log messages for a particular area of an application.
You can instantiate these wherever you want, there's no need to pass
references to them around your application. You can log events based
on importance levels of DEBUG (least important), INFO, WARN, ERROR,
and CRITICAL (most important). You can define your own levels if the
default levels don't meet your requirements.
Handler - used to route events to particular destinations. Handlers
included are:
StreamHandler (for generalized streams, including console)
FileHandler (for disk files - including log file rotation with size
limits for log files)
SocketHandler (for sending events to a TCP socket)
DatagramHandler (for sending events to a UDP socket - faster, but
less reliable than TCP)
SMTPHandler (send events to arbitrary email addresses)
HTTPHandler (send events to Web servers)
SysLogHandler (send events to Unix syslog)
MemoryHandler (batch up events and process them several at a time)
NTEventLogHandler (send events to Windows NT event logs)
There are also examples of XMLHandler and SOAPHandler in the
distribution.
Formatter - used to format events as text strings. Flexible "msg %
arg_tuple" formatting is the basis for formatting, with flexible
date/time formatting including ISO8601 and any strftime-based formats.
Filter - used when filtering based on importance
(DEBUG/INFO/WARN/ERROR/CRITICAL) is not sufficient. The distribution
includes examples of filters based on class matching, regular
expression matching, value matching, and logger matching.
In the unlikely event that you're daunted by all the apparent
complexity, fear not. The package offers a simple function-based
interface to allow very simple, almost casual use of the underlying
features.
In addition to the core logging functionality, you get the ability to
configure logging using a ConfigParser-based text file format, a
Tkinter-based GUI configurator which creates configuration files for
you, and a simple network-based event receiver which receives events
on TCP, UDP, HTTP and SOAP ports. This is suitable for testing and
might perhaps serve as a model for your own event receivers. Also
included are over 20 test scripts which serve both as test harnesses
and examples of how to use the logging package.
You can get more information from
http://www.red-dove.com/python_logging.html
There are "download" and "recent changes" links at the top of that
page. The new stuff includes some bug fixes, better support for
class-based filtering and logging, more documentation of the
configuration file format, an example hand-coded configuration file
for those people who can't use the GUI configurator, an example Filter
for regular-expression match-based filtering, and more!
As always, your feedback is most welcome (especially bug reports,
patches and suggestions for improvement). Enjoy!
Cheers
Vinay Sajip
Red Dove Consultants Ltd.
Changes since the last version:
=================================
Made into a package with three modules: __init__ (the core code),
handlers (all handlers other than
FileHandler and its bases) and config (all the config stuff). Before
doing this:
Updated docstrings to include a short line, then a blank line, then
more descriptive text.
Renamed 'lvl' to 'level' in various functions.
Changed FileHandler to use "a" and "w" instead of "a+" and "w+".
Moved log file rotation functionality from FileHandler to a new class
RotatingFileHandler.
Improved docstring describing rollover.
Updated makePickle to use 4-byte length and struct module, likewise
logrecv.py. Also updated on-the-fly
config reader to use 4-byte length/struct module.
Altered ConfigParser test to look at 'readline' rather than 'read'.
Added optional "defaults" argument to fileConfig, to be passed to
ConfigParser.
Renamed ALL to NOTSET to avoid confusion.
Commented out getRootLogger(), as obsolete.
To do regression testing, run log_test.py and compare the created
files stdout.log and stderr.log against
the files stdout.exp and stderr.exp. They should match except for a
couple of exception messages which give absolute file paths.
Updated python_logging.html to remove links to logging_pydoc.html,
which has been removed from the
distribution.
Changed default for raiseExceptions to 1.