[ python-Bugs-1354052 ] logging: Default handlers broken

SourceForge.net noreply at sourceforge.net
Sat Nov 12 03:51:54 CET 2005


Bugs item #1354052, was opened at 2005-11-11 15:03
Message generated for change (Comment added) made by vsajip
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1354052&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Python Library
Group: Python 2.4
>Status: Closed
>Resolution: Invalid
Priority: 5
Submitted By: Jonathan S. Joseph (jsjoseph)
Assigned to: Vinay Sajip (vsajip)
Summary: logging: Default handlers broken

Initial Comment:
Hi,

There is a strange behaviour in logging. When a new
logger is created, its doesn't have any handlers...
until the root logger is invoked, at which point the
new logger uses the same handler as the root handler. 

See the following code snippet as an illustration of
the bug:

Python 2.4.2 (#67, Sep 28 2005, 12:41:11) [MSC v.1310
32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for
more information.
>>> from logging import *
>>> z = getLogger("z")
>>> z.warning("The Larch.")
No handlers could be found for logger "z"
>>> warning("Bicycle Repair Man!")
WARNING:root:Bicycle Repair Man!
>>> z.warning("The Larch.")
WARNING:z:The Larch.

----------------------------------------------------------------------

>Comment By: Vinay Sajip (vsajip)
Date: 2005-11-12 02:51

Message:
Logged In: YES 
user_id=308438

This is not a bug, this is by design. See the documentation for 
basicConfig() in

http://docs.python.org/lib/module-logging.html

where you will see that the module-level convenience functions 
(debug(), info(), warning(), etc.) call basicConfig() automatically 
if the root logger has no handlers.

The idea is, if you are using the convenience functions, you 
will be using logging in a simple way - hence, basicConfig() is 
called for you. If you had used the root logger directly, e.g. 
after

from logging import *

by using

getLogger().warning("Bicycle Repair Man!")

rather than

warning("Bicycle Repair Man!")

then no handlers would have been added. You would not have 
received the "No handlers could be found", as that is a one-off 
message. In the latest revisions, if you set raiseExceptions to 
0 (typically for production, not development) then that 
message is suppressed completely.

----------------------------------------------------------------------

Comment By: Neal Norwitz (nnorwitz)
Date: 2005-11-12 01:51

Message:
Logged In: YES 
user_id=33168

This may have been fixed recently.  Vinay?

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1354052&group_id=5470


More information about the Python-bugs-list mailing list