def full_context_error_logger():
    """ capture all log specific to a context
    :return:
    """
    from logging.handlers import MemoryHandler
    from StringIO import StringIO
    buffer = StringIO()
    logLevel = logging.DEBUG
    streamhandler = logging.StreamHandler(buffer)
    streamhandler.setLevel(logLevel)
    streamhandler.setFormatter(formatter)
    memory_handler = MemoryHandler(capacity=1024 * 100,
                                   flushLevel=logging.ERROR,
                                   target=streamhandler)
    memory_handler.setLevel(logLevel)
    memory_handler.setFormatter(formatter)
    rootLogger = logging.getLogger()
    rootLogger.addHandler(memory_handler)
    result = {"error_log": None}
    try:
        yield result
    except:
        memory_handler.flush()
        buffer.flush()
        result["error_log"] = buffer.getvalue() + traceback.format_exc()
    finally:
        rootLogger.removeHandler(memory_handler)
        memory_handler.close()
        buffer.close()
Esempio n. 2
0
 def close(self):
     """
     Flush remaining records and terminate all threads
     """
     # Note: Overrides PulseBatcher.close which overrides MemoryHandler.close
     # when inherited by this class
     MemoryHandler.close(self)
     PulseBatcher.close(self)
def create_logging_handler_for_collection(tempdir, prefix):
    from sys import maxsize
    from os import path
    from logging import FileHandler, DEBUG, Formatter
    from logging.handlers import MemoryHandler
    target = FileHandler(path.join(tempdir, "{}.{}.debug.log".format(prefix, get_timestamp())))
    target.setFormatter(Formatter(**LOGGING_FORMATTER_KWARGS))
    handler = MemoryHandler(maxsize, target=target)
    handler.setLevel(DEBUG)
    try:
        yield handler
    finally:
        handler.close()
Esempio n. 4
0
def create_logging_handler_for_collection(tempdir, prefix):
    from sys import maxsize
    from os import path
    from logging import FileHandler, DEBUG, Formatter
    from logging.handlers import MemoryHandler
    target = FileHandler(
        path.join(tempdir, "collection-logs",
                  "{}.{}.debug.log".format(prefix, get_timestamp())))
    target.setFormatter(Formatter(**LOGGING_FORMATTER_KWARGS))
    handler = MemoryHandler(maxsize, target=target)
    handler.setLevel(DEBUG)
    try:
        yield handler
    finally:
        handler.close()
        target.close()
Esempio n. 5
0
 def close(self):
     self.flush()
     if self.__flusher and self.__flusher.is_alive():
         self.__flusher.join()
     MemoryHandler.close(self)