Florian Lindner wrote:
Hello,

I configure my logging on application startup like that:

logging.basicConfig(level = logging.DEBUG, format=FORMAT, filename = logfile)
ch  = logging.StreamHandler()
ch.setFormatter(logging.Formatter(FORMAT))
logging.getLogger().addHandler(ch)

In one module of my application I want a logger that does not log to logfile but to another file. How can I get a logger that is either plain (no handlers attached) or remove a handler?

The handlers that are derived from the root logger are not shown in handlers:

(Pdb) logger1.handlers
[]
(Pdb) logging.getLogger().handlers
[<logging.FileHandler object at 0x7f3e8f6f0e90>, <logging.StreamHandler object at 0x7f3e8f731450>]

How can I remove the FileHandler and StreamHandler from logger1 without affecting the root logger?

logger1.removeHandler() does not work since there are no handlers on logger1.

Thanks,

Florian
The usual pattern is that the root logger is handling all the events. Sub loggers are only raising log events.
Try to stick with this most of the time.

However in your case you need a sub logger to handle its logs in a different way. For that you have to add a handler to your sub logger and tells it to not sent log event to its parent. If I remeber correctly, this is done by setting the 'propagate' attribute of you logger to 0.

That could look like (not tested):

import logging

root = logging.getLogger()
foo = logging.getLogger('foo')

root.addHandler(logging.StreamHandler())
foo.addHandler(logging.FileHandler('foo.log'))
foo.propagate = 0

Cheers,

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

Reply via email to