Source code for mcot.utils.log

import os
import sys

from loguru import logger

SUBMITTED = os.getenv('FSLSUBALREADYRUN', default='') == 'true'


[docs]def get_level(): """Returns the requested log level. 0: no logging 1: warning+ 2: info+ 3: debug+ 4: all+ """ levels = ( None, "WARNING", "INFO", "DEBUG", 0 ) if 'MCLOG' in os.environ: idx = int(os.environ['MCLOG']) else: idx = 3 if SUBMITTED else 2 if idx > 4: idx = -1 return levels[idx]
LOGSET = False
[docs]def setup_log(filename=None, replace=True): """Sets up the logger to log to the given filename. Sets up logging to: - If .log directory exists: - ~/.log/python.info (INFO and higher) - ~/.log/python.debug (DEBUG and higher) - stderr (minimum level is set by MCLOG; default values are DEBUG if submitted, INFO otherwise) - `filename` if provided :param filename: filename used in the logging (default: only set up logging to stdout/stderr and ~/.log directory) :param replace: if replace is True, replace the existing handlers """ global LOGSET if replace: logger.remove(handler_id=None) if get_level() is None: return if filename is not None: logger.add(filename, level="DEBUG") logger.info(f'Added logging in {filename} ') if not LOGSET: logger.add(sys.stderr, level=get_level()) log_directory = os.path.expanduser('~/.log') if os.path.isdir(log_directory): try: logger.add(os.path.join(log_directory, 'python.info'), rotation='1:00', level="INFO") except OSError: logger.exception("Failed to create .log/python.info file") try: logger.add(os.path.join(log_directory, 'python.debug'), rotation='1:00', level="DEBUG") except OSError: logger.exception("Failed to create .log/python.debug file") else: logger.info(f'Log directory {log_directory} not found; Skipping setup of global logging') LOGSET = True logger.debug(f'Finished setting up logging')