which then get dispatched, by the logging system, to the handlers
configured for those loggers.
"""
+
def handle(self, record):
- logger = logging.getLogger(record.name)
- # The process name is transformed just to show that it's the listener
- # doing the logging to files and console
- record.processName = '%s (for %s)' % (current_process().name, record.processName)
- logger.handle(record)
+ if record.name == "root":
+ logger = logging.getLogger()
+ else:
+ logger = logging.getLogger(record.name)
+
+ if logger.isEnabledFor(record.levelno):
+ # The process name is transformed just to show that it's the listener
+ # doing the logging to files and console
+ record.processName = '%s (for %s)' % (current_process().name, record.processName)
+ logger.handle(record)
def listener_process(q, stop_event, config):
"""
# The main process gets a simple configuration which prints to the console.
config_initial = {
'version': 1,
- 'formatters': {
- 'detailed': {
- 'class': 'logging.Formatter',
- 'format': '%(asctime)s %(name)-15s %(levelname)-8s %(processName)-10s %(message)s'
- }
- },
'handlers': {
'console': {
'class': 'logging.StreamHandler',
- 'level': 'INFO',
- },
+ 'level': 'INFO'
+ }
},
'root': {
- 'level': 'DEBUG',
- 'handlers': ['console']
- },
+ 'handlers': ['console'],
+ 'level': 'DEBUG'
+ }
}
# The worker process configuration is just a QueueHandler attached to the
# root logger, which allows all messages to be sent to the queue.
'handlers': {
'queue': {
'class': 'logging.handlers.QueueHandler',
- 'queue': q,
- },
+ 'queue': q
+ }
},
'root': {
- 'level': 'DEBUG',
- 'handlers': ['queue']
- },
+ 'handlers': ['queue'],
+ 'level': 'DEBUG'
+ }
}
# The listener process configuration shows that the full flexibility of
# logging configuration is available to dispatch events to handlers however
'handlers': {
'console': {
'class': 'logging.StreamHandler',
- 'level': 'INFO',
'formatter': 'simple',
+ 'level': 'INFO'
},
'file': {
'class': 'logging.FileHandler',
'filename': 'mplog.log',
'mode': 'w',
- 'formatter': 'detailed',
+ 'formatter': 'detailed'
},
'foofile': {
'class': 'logging.FileHandler',
'filename': 'mplog-foo.log',
'mode': 'w',
- 'formatter': 'detailed',
+ 'formatter': 'detailed'
},
'errors': {
'class': 'logging.FileHandler',
'filename': 'mplog-errors.log',
'mode': 'w',
- 'level': 'ERROR',
'formatter': 'detailed',
- },
+ 'level': 'ERROR'
+ }
},
'loggers': {
'foo': {
}
},
'root': {
- 'level': 'DEBUG',
- 'handlers': ['console', 'file', 'errors']
- },
+ 'handlers': ['console', 'file', 'errors'],
+ 'level': 'DEBUG'
+ }
}
# Log some initial events, just to show that logging in the parent works
# normally.