[entropy.misc] LogFile: remove loggers cache, does more harm than good
This commit is contained in:
+18
-31
@@ -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):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user