From 5ed8c2e1c057cddacfe6d3e58469d44644a1f909 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Thu, 17 Nov 2022 21:27:44 +0100 Subject: [PATCH] Core: datetime-tag log files and delete old ones --- Utils.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Utils.py b/Utils.py index f4735bbc6a..357bebb70c 100644 --- a/Utils.py +++ b/Utils.py @@ -452,6 +452,7 @@ loglevel_mapping = {'error': logging.ERROR, 'info': logging.INFO, 'warning': log def init_logging(name: str, loglevel: typing.Union[str, int] = logging.INFO, write_mode: str = "w", log_format: str = "[%(name)s at %(asctime)s]: %(message)s", exception_logger: typing.Optional[str] = None): + import datetime loglevel: int = loglevel_mapping.get(loglevel, loglevel) log_folder = user_path("logs") os.makedirs(log_folder, exist_ok=True) @@ -460,6 +461,8 @@ def init_logging(name: str, loglevel: typing.Union[str, int] = logging.INFO, wri root_logger.removeHandler(handler) handler.close() root_logger.setLevel(loglevel) + if "a" not in write_mode: + name += f"_{datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')}" file_handler = logging.FileHandler( os.path.join(log_folder, f"{name}.txt"), write_mode, @@ -487,6 +490,19 @@ def init_logging(name: str, loglevel: typing.Union[str, int] = logging.INFO, wri sys.excepthook = handle_exception + def _cleanup(): + for file in os.scandir(log_folder): + if file.name.endswith(".txt"): + last_change = datetime.datetime.fromtimestamp(file.stat().st_mtime) + if datetime.datetime.now() - last_change > datetime.timedelta(days=7): + try: + os.unlink(file.path) + except Exception as e: + logging.exception(e) + else: + logging.info(f"Deleted old logfile {file.path}") + import threading + threading.Thread(target=_cleanup, name="LogCleaner").start() logging.info(f"Archipelago ({__version__}) logging initialized.")