Emmanuel Chinonye Nnajiofor
CHORE: Minor change to logger.py
c547a7e
import logging
import sys
import os
from pathlib import Path
from logging.handlers import RotatingFileHandler
LOG_DIR = Path(os.getenv("LOG_DIR", Path(__file__).resolve().parent.parent / "logs"))
LOG_DIR.mkdir(parents=True, exist_ok=True)
LOG_FILE = LOG_DIR / "app.log"
LOG_CONFIG = {
"console_format": "%(asctime)s | %(levelname)-8s | %(name)-20s | %(message)s",
"file_format": "%(asctime)s | %(levelname)-8s | %(name)-20s | %(funcName)s:%(lineno)d | %(message)s",
"date_format": "%Y-%m-%d %H:%M:%S",
"max_bytes": 5 * 1024 * 1024, # 5MB
"backup_count": 3,
}
_logger_cache = {}
def get_logger(name: str = "clinical-assistant") -> logging.Logger:
"""Get a configured logger instance with console and file handlers
Args:
name: Logger name (usually __name__ of calling module)
Returns:
Configured Logger instance
"""
if name in _logger_cache:
return _logger_cache[name]
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
if logger.hasHandlers():
_logger_cache[name] = logger
return logger
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(logging.INFO)
console_formatter = logging.Formatter(
LOG_CONFIG["console_format"], LOG_CONFIG["date_format"]
)
console_handler.setFormatter(console_formatter)
file_handler = RotatingFileHandler(
LOG_FILE,
maxBytes=LOG_CONFIG["max_bytes"],
backupCount=LOG_CONFIG["backup_count"],
)
file_handler.setLevel(logging.DEBUG)
file_formatter = logging.Formatter(
LOG_CONFIG["file_format"], LOG_CONFIG["date_format"]
)
file_handler.setFormatter(file_formatter)
logger.addHandler(console_handler)
logger.addHandler(file_handler)
_logger_cache[name] = logger
return logger