[entropy.misc] LogFile: remove loggers cache, does more harm than good

This commit is contained in:
Fabio Erculiani
2010-08-29 09:49:05 +02:00
parent 720e2ed55a
commit dce7a38c69
+18 -31
View File
@@ -989,7 +989,6 @@ class LogFile:
}
LOG_FORMAT = "%(asctime)s %(levelname)s: %(message)s"
DATE_FORMAT = "[%H:%M:%S %d/%m/%Y %Z]"
_HANDLER_CACHE = {}
def __init__(self, level = None, filename = None, header = "[LOG]"):
"""
@@ -1014,30 +1013,17 @@ class LogFile:
self.__level = LogFile.LEVELS.get(logger_level)
self.__logger.setLevel(logging.DEBUG)
handler_cache_key = self.__handler_cache_key()
cached_handler = LogFile._HANDLER_CACHE.get(handler_cache_key)
if cached_handler is None:
if self.__filename is not None:
try:
self.__handler = logging.FileHandler(self.__filename)
except (IOError, OSError):
self.__handler = logging.StreamHandler()
else:
if self.__filename is not None:
try:
self.__handler = logging.FileHandler(self.__filename)
except (IOError, OSError):
self.__handler = logging.StreamHandler()
LogFile._HANDLER_CACHE[handler_cache_key] = self.__handler
self.__handler.setLevel(self.__level)
self.__handler.setFormatter(logging.Formatter(LogFile.LOG_FORMAT,
LogFile.DATE_FORMAT))
self.__logger.addHandler(self.__handler)
else:
self.__handler = cached_handler
def __handler_cache_key(self):
return (self.__filename, self.__level)
def __del__(self):
self.close()
self.__handler = logging.StreamHandler()
self.__handler.setLevel(self.__level)
self.__handler.setFormatter(logging.Formatter(LogFile.LOG_FORMAT,
LogFile.DATE_FORMAT))
self.__logger.addHandler(self.__handler)
def fileno(self):
return self.__handler.stream.fileno()
@@ -1047,16 +1033,17 @@ class LogFile:
if hasattr(self.__handler, 'flush'):
self.__handler.flush()
def __del__(self):
self.close()
def close(self):
""" Close log file """
handler_cache_key = self.__handler_cache_key()
# drop from cache
handler = LogFile._HANDLER_CACHE.pop(handler_cache_key, None)
if handler is not None:
if hasattr(handler, 'close'):
handler.close()
handler = None
self.__logger = None
if self.__handler is not None:
if hasattr(self.__handler, 'close'):
self.__handler.close()
self.__logger.removeHandler(self.__handler)
self.__handler = None
self.__logger = None
def _handler(self, mystr):
"""