knowledge-engine / core /logger.py
m97j's picture
Initial commit
b62e029
# core/logger.py
import logging
import sys
from typing import Optional
try:
from core.config import settings
DEFAULT_LOG_LEVEL = settings.LOG_LEVEL
except ImportError:
DEFAULT_LOG_LEVEL = "INFO"
# logging format: timestamp | log level | logger name | message
LOG_FORMAT = "%(asctime)s | %(levelname)-8s | %(name)s | %(message)s"
DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
def setup_logger(name: str, level: Optional[str] = None) -> logging.Logger:
"""
Returns a standardized logger instance for use in each module.
Usage: logger = setup_logger(__name__)
"""
logger = logging.getLogger(name)
# If the logger already has a handler set up (to prevent duplicate calls), return as is.
if logger.handlers:
return logger
# Set the log level
log_level = level or DEFAULT_LOG_LEVEL
logger.setLevel(getattr(logging, log_level.upper(), logging.INFO))
# Prevent duplicate logging (do not propagate to parent loggers)
logger.propagate = False
# Create console handler and set level
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(logger.level)
# Apply formatter
formatter = logging.Formatter(fmt=LOG_FORMAT, datefmt=DATE_FORMAT)
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
return logger