Logging to zero or more destinations

Rob Wolfe rw at smsnet.pl
Tue Jul 8 16:01:07 EDT 2008


samwyse <samwyse at gmail.com> writes:

> In the Python 2.5 Library Reference, section 14.5.3 (Logging to
> multiple destinations), an example is given of logging to both a file
> and the console.  This is done by using logging.basicConfig() to
> configure a log file, and then calling
> logging.getLogger('').addHandler(console) to add the console.
>
> However, in section 14.5.4 (Sending and receiving logging events
> across a network), a call is made to
> rootLogger.addHandler(socketHandler), and later it is stated that "On
> the client side, nothing is printed on the console".
>
> Finally, back in section 14.5.2 (Basic example), it's stated that "by
> default, the root logger is configured to only handle messages with a
> severity of WARNING or above. The message format is also a
> configuration default, as is the output destination of the messages -
> sys.stderr."
>
> The only way that I can see for all three statements to be consistent
> is that the root logger starts with an empty list of handlers, and
> doesn't instantiate a default handler until either
> logging.basicConfig()  is called, 

That is correct.

> or the first time that a message is
> logged.  

That is not correct. The list of handlers is empty until `basicConfig`
or explicit `addHandler` is called.

> This would also seem to imply that there's no way to use an
> empty handler list (say, if you want to suppress all logging), because
> the root handler will instantiate a handler for you.  Is this correct?

No. Consider this:

>>> import logging
>>> logging.root.warning('error message')
No handlers could be found for logger "root"
>>> logging.root.warning('error message')

Note only one warning message.


> P.S.  I tried researching this further by myself, but the logging
> module doesn't come with source (apparently it's written in C?) and I
> don't have the time to find and download the source to my laptop.

Hmmm... that's strange. It is a pure Python package.

$ ls /usr/lib/python2.5/logging/
config.py  config.pyc  handlers.py  handlers.pyc  __init__.py  __init__.pyc

HTH,
Rob



More information about the Python-list mailing list