For obscure reasons, I wanted to log certain messages to a dynamically created webpage, in addition to stderr and a logfile. Googling brought up all kinds of possible ways, but I finally settled on extending logging.NullHandler:
class DequeHandler(logging.NullHandler): ''' simple handler to append log record to queue ''' def handle(self, record): if hasattr(record, 'to_page'): MESSAGE_QUEUE.append(':'.join([ record.name, record.levelname, record.msg % record.args ]))logging.getLogger('').addHandler(DequeHandler())
Then, when the webpage is generated, I just loop through the deque. To have a message inserted into it, you need to add the extra parameter to the logging call: logging.warning('This logs to all handlers', extra={'to_page': True}).
Due to my not checking, it would still go to the queue if `to_page` were set to False, but I'm not even going to worry about that.
I've been lax on updating my blog lately, preferring to facebook and tweet whatever I had to say. But I've got to wean myself off those timewasters.
last updated 2021-12-17 23:55:08. served from tektonic.jcomeau.com