Source code for ephemeris.ephemeris_log

import logging
import tempfile


[docs] class ProgressConsoleHandler(logging.StreamHandler): """ A handler class which allows the cursor to stay on one line for selected messages """ on_same_line = False
[docs] def emit(self, record): try: msg = self.format(record) stream = self.stream same_line = hasattr(record, "same_line") if self.on_same_line and not same_line: stream.write("\r\n") stream.write(msg) if same_line: stream.write(".") self.on_same_line = True else: stream.write("\r\n") self.on_same_line = False self.flush() except (KeyboardInterrupt, SystemExit): raise except Exception: self.handleError(record)
[docs] def disable_external_library_logging(): # Omit (most of the) logging by external libraries logging.getLogger("bioblend").setLevel(logging.ERROR) logging.getLogger("requests").setLevel(logging.ERROR) try: logging.captureWarnings(True) # Capture HTTPS warngings from urllib3 except AttributeError: pass
[docs] def setup_global_logger(name, log_file=None): formatter = logging.Formatter("%(asctime)s %(levelname)-5s - %(message)s") progress = ProgressConsoleHandler() console = logging.StreamHandler() console.setFormatter(formatter) logger = logging.getLogger(name) logger.setLevel(logging.DEBUG) logger.addHandler(progress) if not log_file: # delete = false is chosen here because it is always nice to have a log file # ready if you need to debug. Not having the "if only I had set a log file" # moment after the fact. temp = tempfile.NamedTemporaryFile(prefix="ephemeris_", delete=False) log_file = temp.name file_handler = logging.FileHandler(log_file) logger.addHandler(file_handler) logger.info(f"Storing log file in: {log_file}") return logger