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