import logging import sys from logging.handlers import RotatingFileHandler from iottb import definitions from iottb.definitions import MAX_VERBOSITY, CONSOLE_LOG_FORMATS, APP_NAME, LOGFILE_LOG_FORMAT loglevel = definitions.LOGLEVEL def setup_logging(verbosity, debug=loglevel): """ Setup root logger for iottb """ log_level = loglevel handlers = [] date_format = '%Y-%m-%d %H:%M:%S' if verbosity > 0: log_level = logging.WARNING if verbosity > MAX_VERBOSITY: verbosity = MAX_VERBOSITY log_level = logging.INFO assert verbosity <= MAX_VERBOSITY, f'Verbosity must be <= {MAX_VERBOSITY}' console_handler = logging.StreamHandler(sys.stdout) print(str(sys.stdout)) console_handler.setFormatter(logging.Formatter(CONSOLE_LOG_FORMATS[verbosity], datefmt=date_format)) console_handler.setLevel(logging.DEBUG) # can keep at debug since it depends on global level? handlers.append(console_handler) if debug: log_level = logging.DEBUG # Logfile logs INFO+, no debugs though file_handler = RotatingFileHandler(f'{str(definitions.LOGDIR / APP_NAME)}.log', maxBytes=10240, backupCount=5) file_handler.setFormatter(logging.Formatter(LOGFILE_LOG_FORMAT[verbosity], datefmt=date_format)) file_handler.setLevel(logging.INFO) # finnish root logger setup handlers.append(file_handler) # Force this config to be applied to root logger logging.basicConfig(level=log_level, handlers=handlers, force=True)