From 3aff237a9b2e393bd2be0e0ce3ad270e8fd84e65 Mon Sep 17 00:00:00 2001 From: bennahugo Date: Thu, 28 Mar 2024 16:26:50 +0200 Subject: [PATCH] Fixes #92 - Make logfile path configurable - Timestamp log - Gracefully bail if logfile cannot be written --- tricolour/apps/tricolour/app.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/tricolour/apps/tricolour/app.py b/tricolour/apps/tricolour/app.py index 28de366..654427e 100644 --- a/tricolour/apps/tricolour/app.py +++ b/tricolour/apps/tricolour/app.py @@ -37,6 +37,7 @@ from tricolour.window_statistics import (window_stats, combine_window_stats, summarise_stats) +from datetime import datetime ############################################################## # Initialize Post Mortem debugger @@ -61,18 +62,30 @@ def create_logger(): log = logging.getLogger("tricolour") cfmt = logging.Formatter(u'%(name)s - %(asctime)s ' '%(levelname)s - %(message)s') - log.setLevel(logging.DEBUG) - filehandler = logging.FileHandler("tricolour.log") - filehandler.setFormatter(cfmt) - log.addHandler(filehandler) log.setLevel(logging.INFO) - console = logging.StreamHandler() console.setLevel(logging.INFO) console.setFormatter(cfmt) - log.addHandler(console) + # add an optional file handler + logger_path = os.environ.get("TRICOLOUR_LOGPATH", os.getcwd()) + nowT = int(np.ceil(datetime.timestamp(datetime.now()))) + logfile = os.path.join(logger_path, + f"tricolour.{nowT}.log") + try: + with open(logfile, "w") as f: + f.write("") + filehandler = logging.FileHandler(logfile) + filehandler.setFormatter(cfmt) + log.addHandler(filehandler) + if logger_path != os.getcwd(): + log.info(f"A copy of this log is available at {logfile}") + except PermissionError: + log.warning(f"Failed to initialize logfile for this run. " + f"Check your permissions and available space on " + f"'{logger_path}'. Proceeding without writing " + f"a logfile.") return log