[ python-Bugs-994421 ] logging module prints unexpected message when no handler set

SourceForge.net noreply at sourceforge.net
Wed Jul 21 16:45:53 CEST 2004


Bugs item #994421, was opened at 2004-07-20 06:28
Message generated for change (Comment added) made by roysmith
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=994421&group_id=5470

Category: Python Library
Group: Python 2.3
Status: Closed
Resolution: Invalid
Priority: 5
Submitted By: Roy Smith (roysmith)
Assigned to: Vinay Sajip (vsajip)
Summary: logging module prints unexpected message when no handler set

Initial Comment:
I am running:

Roy-Smiths-Computer:unit$ uname -a
Darwin Roy-Smiths-Computer.local 7.4.0 Darwin Kernel Version 
7.4.0: Wed May 12 16:58:24 PDT 2004; root:xnu/xnu
-517.7.7.obj~7/RELEASE_PPC  Power Macintosh powerpc
Roy-Smiths-Computer:unit$ py
Python 2.3.4 (#3, Jun 29 2004, 21:48:03) 
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more 
information.

---------
#!/usr/bin/env python

import logging

logger = logging.getLogger ()
logger.error ('one')
logger.error ('two')
---------

The above program prints (to stderr):

---------
No handlers could be found for logger "root"
---------

6.28 logging --  Logging facility for Python says, "Each logger can 
have zero, one or more handlers associated with it".  It doesn't 
explicitly says what happens when there are zero handlers, but I 
would expect that any messages would just be silently ignored.  
Printing a warning to stderr is definately the WRONG thing to do.


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

>Comment By: Roy Smith (roysmith)
Date: 2004-07-21 10:45

Message:
Logged In: YES 
user_id=390499

I disagree.

I don't think it should be considered an error to have a logger with no 
handlers configured (especially since the documentation explicitly states 
that it's allowed).  The logic here is that every handler gets a chance to 
process the message; there's nothing magic about the list of handlers 
being empty.

Here's where this came up:  I've got a class I'm testing.  I embedded 
some logger.debug () calls in it.  Most of the time I don't even want to 
see those calls.  Sure, I could create a logger handler, and set a level 
which ignores debug calls, but that forces every user of my class to do 
that.  If a logger with no handlers attached just silently drops all 
messages, the user doesn't even have to know about the logging calls in 
my class.

Even if you were to decide to enforce that a logger must have at least 
one handler, then the error should be signified the way all other python 
errors are -- by throwing an exception.  And, of course, you should 
update the documention to match.  But, I think this would be the wrong 
approach.  Just eliminating the message to stderr would be (IMHO) the 
right thing to do.


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

Comment By: Roy Smith (roysmith)
Date: 2004-07-21 10:45

Message:
Logged In: YES 
user_id=390499

I disagree.

I don't think it should be considered an error to have a logger with no 
handlers configured (especially since the documentation explicitly states 
that it's allowed).  The logic here is that every handler gets a chance to 
process the message; there's nothing magic about the list of handlers 
being empty.

Here's where this came up:  I've got a class I'm testing.  I embedded 
some logger.debug () calls in it.  Most of the time I don't even want to 
see those calls.  Sure, I could create a logger handler, and set a level 
which ignores debug calls, but that forces every user of my class to do 
that.  If a logger with no handlers attached just silently drops all 
messages, the user doesn't even have to know about the logging calls in 
my class.

Even if you were to decide to enforce that a logger must have at least 
one handler, then the error should be signified the way all other python 
errors are -- by throwing an exception.  And, of course, you should 
update the documention to match.  But, I think this would be the wrong 
approach.  Just eliminating the message to stderr would be (IMHO) the 
right thing to do.


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

Comment By: Vinay Sajip (vsajip)
Date: 2004-07-21 10:24

Message:
Logged In: YES 
user_id=308438

This is not a bug. In general, the logging module does not 
print spurious error messages - however, in the case where 
no handlers are configured at all, then this is considered a 
possible configuration error and a single message is printed. 
Note that log4j does this too - it's not peculiar to Python 
logging.

Note that logged messages are not printed - only the single 
warning indicating a possible configuration problem.

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

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


More information about the Python-bugs-list mailing list