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()
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()
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()
def close(self): self.flush() if self.__flusher and self.__flusher.is_alive(): self.__flusher.join() MemoryHandler.close(self)