import logging import sys from pathlib import Path import coloredlogs from llm_server import opts class LoggingInfo: def __init__(self): self._level = logging.INFO self._format = opts.LOGGING_FORMAT @property def level(self): return self._level @level.setter def level(self, value): self._level = value @property def format(self): return self._format @format.setter def format(self, value): self._format = value logging_info = LoggingInfo() LOG_DIRECTORY = None def init_logging(filepath: Path = None): """ Set up the parent logger. Ensures this logger and all children to log to a file. This is only called by `server.py` since there is wierdness with Gunicorn. The deamon doesn't need this. :return: """ logger = logging.getLogger('llm_server') logger.setLevel(logging_info.level) if filepath: p = Path(filepath) if not p.parent.is_dir(): logger.fatal(f'Log directory does not exist: {p.parent}') sys.exit(1) LOG_DIRECTORY = p.parent handler = logging.FileHandler(filepath) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) def create_logger(name): logger = logging.getLogger('llm_server').getChild(name) logger.setLevel(logging_info.level) if not logger.handlers: handler = logging.StreamHandler() handler.setLevel(logging_info.level) formatter = logging.Formatter(logging_info.format) handler.setFormatter(formatter) logger.addHandler(handler) coloredlogs.install(logger=logger, level=logging_info.level) if LOG_DIRECTORY: handler = logging.FileHandler(LOG_DIRECTORY / f'{name}.log') logger.addHandler(handler) return logger