Masklinn wrote:
Jean-Michel Pichavant wrote:
To add a custom level, I would proceed that way:

logging.ALERT = 45
logging.addLevelName(logging.ALERT, 'ALERT !!')
logging.getLogger().log(logging.ALERT, 'test')

Passing a string to the log method as you did is incorrect.

I know it's currently incorrect. My point was more along the line that there 
was *no reason* for it to be incorrect. logging already contains all the tools 
for log('PANTS_ON_FIRE') to be allowed
The reason is that log takes an *int* as first argument that defines the logging level. You gave a string. So There is definitely a reason for it to be incorrect.
Regarding your first point, I guess it's anti pattern. One way to do it:
1/ Configure the root logger with the lowest value 0, so the root logger does not filter any level.
2/ Configure each of your logger with the correct level

That way you can configure your '0' logger as you (badly :o)) named it with one level, and configure a potential '1' logger with another level. Don't bother with propagation. That way you won't need to duplicate your handlers on every logger.

re logger 0, no need for complex name for a test case (and it allowed me to 
create easy-to-remember 0.1 and 0.1.2 if needed)

Re your answer, from what I understand you want the root logger to NOTSET and 
then each child logger with its correct level? But that's not a solution, each 
and every level will *still* require a handler explicitly configured on it. 
That's in fact very much my issue: logging refuses that a logger be 
handler-less in a config file, it's mandatory to configure a handler any time a 
logger is configured.
the field handlers must be defined even if empty.

[loggers]
keys=root,0,1

[handlers]
keys=console

[formatters]
keys=simple

[logger_root]
level=DEBUG
handlers=console

[logger_1]
level=INFO
qualname=1
handlers=

[logger_0]
level=DEBUG
qualname=0
handlers=

[handler_console]
class=StreamHandler
formatter=simple
args=()

[formatter_simple]
format=%(asctime)s:%(levelname)-8s:%(name)s::%(message)s


import logging; import logging.config
logging.config.fileConfig("log.config")
l1 = logging.getLogger("1")
l0 = logging.getLogger("0")
l1.debug('I am l1')
...
l0.debug('I am l0')
... 2010-02-02 17:48:55,710:DEBUG   :0::I am l0

JM
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to