Not sure I want my INFO to go to stdout, by the way.  That     corresponds to "debugging print statement" behavior, but even my     "cheap logger" actually puts stuff in a file instead, and gets it     out of the way of the normal output.
    
    I'd suggest that this be "simplified" to put all the messages in the     same (disk) file, but then I'm sure that there are other preferences     than mine... you clearly thought about what you wanted/thought would     be useful, in coming up with the above.
    
    On 12/10/2010 9:24 PM, Nick Coghlan wrote:     
      This could actually make a reasonably good basic for a "task oriented" subsection of the logging documentation. Something like:     
    
    Yep, agree.  But sadly, for each point, there may be multiple     options (your StreamHandler, but I'd want a FileHandler; your     separation of messages by level, my wanting them combined; etc.)
    
    Your comment about basicConfig setting the level on the root logger,     but not on the default handler making it useless is opaque to me,     but is there perhaps room for another basic setup API that could get     the setup code down to a line or two in simple cases?  Maybe 3     parameters:
    
    1.  minimum level to be generated, which would be passed through to     the root logger and anything else defined by this basic setup API
    
    2. whether debug and info should go to the same or different     stream/file as warn+ messages.  Maybe this is a stream or filename     or None, the last implying to use the warn+ output.
    
    3. Where to send the warn+ output.
    
    maybe a 4. Maximum (size, count) of the round-robin log files,     assuming that either or both of 2 & 3 specify files.
    
    Would that be a useful set of functionality to bundle?  And could it     be extended, when the user wants more power, or would it have to be     replaced, because it gets in the way of the user that wants more     power?
    
    
    
    
   ">

(original) (raw)

On 12/10/2010 9:06 PM, Nick Coghlan wrote:
Anyway, the shortest way I could find of setting this up (debug  
silenced, info written to stdout, warning and above written to  
stderr):

import sys, logging
root = logging.getLogger()
# Turns out the level of the root logger is set to WARNING by default
# That should be much easier to find out from the logging docs!
root.setLevel(logging.DEBUG)
# Send WARNING and above to stderr
# basicConfig() is no help, since it sets the specified level on the
root logger
# but NOT on the default handler it installs. To emulate console output
# we want to skip the formatting anyway.
err = logging.StreamHandler()
err.setLevel(logging.WARNING)
root.addHandler(err)
# Send INFO to stdout
def is_info(record):
return record.levelno == logging.INFO
out = logging.StreamHandler(stream=sys.stdout)
out.addFilter(is_info)
root.addHandler(out)





Wow, that's way longer than I expected... almost as long as my
"cheap logger".  Greg didn't flesh out the "setup" stuff, but you
have, so this is educational.  Thanks.



Not sure I want my INFO to go to stdout, by the way.  That
corresponds to "debugging print statement" behavior, but even my
"cheap logger" actually puts stuff in a file instead, and gets it
out of the way of the normal output.



I'd suggest that this be "simplified" to put all the messages in the
same (disk) file, but then I'm sure that there are other preferences
than mine... you clearly thought about what you wanted/thought would
be useful, in coming up with the above.



On 12/10/2010 9:24 PM, Nick Coghlan wrote:

This could actually make a reasonably good basic for a "task oriented"
subsection of the logging documentation. Something like:




Yep, agree.  But sadly, for each point, there may be multiple
options (your StreamHandler, but I'd want a FileHandler; your
separation of messages by level, my wanting them combined; etc.)



Your comment about basicConfig setting the level on the root logger,
but not on the default handler making it useless is opaque to me,
but is there perhaps room for another basic setup API that could get
the setup code down to a line or two in simple cases?  Maybe 3
parameters:



1.  minimum level to be generated, which would be passed through to
the root logger and anything else defined by this basic setup API



2. whether debug and info should go to the same or different
stream/file as warn+ messages.  Maybe this is a stream or filename
or None, the last implying to use the warn+ output.



3. Where to send the warn+ output.



maybe a 4. Maximum (size, count) of the round-robin log files,
assuming that either or both of 2 & 3 specify files.



Would that be a useful set of functionality to bundle?  And could it
be extended, when the user wants more power, or would it have to be
replaced, because it gets in the way of the user that wants more
power?