<olsongt <at> verizon.net> writes: > > I'm trying to be a good boy and use the logging module but it's > behaving rather counter-intuitively. I've posted a simplified test > script below. > > To summarize, I've set the basic config to only log root level messages > with >= ERROR level. I've created another named logger that logs on > info level. I've set it up so it just shows the message text without > "INFO:: logger:" boilerplate. > > The way I see things, when I call otherLogger.info, it should propogate > the message to the root logger, but the root logger should discard it > since it is at ERROR level. > > Could someone explain what I'm not getting? > > -Grant
The way it works is: when you log to a logger, the event level is checked against the logger. If the event should be logged (event level >= logger level) then the event is passed to the handlers configured for that logger, and (while the logger's propagate attribute is true - the default - passed to handlers configured for loggers higher up the hierarchy. In your case, this inlcudes the root logger's handlers. Note that if you don't set a level on a logger, then the hierarchy is searched until a level is found. That becomes the effective level for the logger. Handlers normally process all events passed to them, but you can set a level on a handler to get it to drop events below a certain threshold. Since you haven't done this, you will see an INFO message appear even though the root logger's level is set to ERROR. (This would only affect logging calls to the root logger). Rule of thumb: Set levels on handlers only when you need them, not as common practice. If you don't want to see info messages from otherLogger, set its level to > INFO. Vinay Sajip -- http://mail.python.org/mailman/listinfo/python-list