Source code for androlyze.log.streamhandler.MsgCollectorStreamHandler


# encoding: utf-8

__author__ = "Nils Tobias Schmidt"
__email__ = "schmidt89 at informatik.uni-marburg.de"

from Queue import Empty
from logging import StreamHandler

[docs]class MsgCollectorStreamHandler(StreamHandler): ''' `StreamHandler` that collects stdout/stderr messages in a `Queue<bool,str> ''' def __init__(self, msg_queue, is_stderr = False): ''' Parameters ---------- is_stderr : bool Indicate if logging to stdout. msg_queue : Queue<bool, str> Collect the messages in this queue ''' super(MsgCollectorStreamHandler, self).__init__() self.is_stderr = is_stderr self.__msg_queuing = False self.msg_queue = msg_queue
[docs] def get_msg_queue(self): return self.__msg_queue
[docs] def set_msg_queue(self, value): self.__msg_queue = value
[docs] def del_msg_queue(self): del self.__msg_queue
[docs] def get_msg_queuing(self): return self.__msg_queuing
msg_queuing = property(get_msg_queuing, None, None, "bool : If true collect msg in `self.msg_queue`") msg_queue = property(get_msg_queue, set_msg_queue, del_msg_queue, "Queue<bool, str> : Collect the log messages here.")
[docs] def start_msg_queing(self): ''' Start putting messages into the queue ''' self.__msg_queuing = True
[docs] def stop_msg_queing(self): ''' Stop collection messages into the queue and clear it ''' self.__msg_queuing = False # remove all elements try: while self.msg_queue.get(block = False): pass except Empty: pass
[docs] def emit(self, record): """ Emit a record. """ try: msg = self.format(record) if self.msg_queuing: self.msg_queue.put((msg, self.is_stderr)) except (KeyboardInterrupt, SystemExit): raise