72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
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:
|
|
"""
|
|
global LOG_DIRECTORY
|
|
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
|