GenAI-FASTAPI / config /logger_config.py
subashpoudel's picture
next commit
0b2c9fd
# logger_config.py
import logging
import os
class RelativePathFormatter(logging.Formatter):
def format(self, record):
record.relpath = os.path.relpath(record.pathname, os.getcwd())
return super().format(record)
def setup_loggers():
os.makedirs("logs", exist_ok=True)
# === Format ===
# formatter = logging.Formatter("%(asctime)s | %(levelname)s | %(name)s | %(message)s")
formatter = RelativePathFormatter("%(asctime)s | %(levelname)s | %(name)s | %(relpath)s:%(lineno)d | %(message)s")
# === App Logger ===
app_logger = logging.getLogger("app_logger")
app_handler = logging.FileHandler("logs/app.log")
app_handler.setLevel(logging.INFO)
app_handler.setFormatter(formatter)
app_logger.setLevel(logging.INFO)
app_logger.addHandler(app_handler)
# === Error Logger ===
error_logger = logging.getLogger("error_logger")
error_handler = logging.FileHandler("logs/errors.log")
error_handler.setLevel(logging.ERROR)
error_handler.setFormatter(formatter)
error_logger.setLevel(logging.ERROR)
error_logger.addHandler(error_handler)
# === Access Logger === (optional for request logs)
access_logger = logging.getLogger("access_logger")
access_handler = logging.FileHandler("logs/access.log")
access_handler.setLevel(logging.INFO)
access_handler.setFormatter(formatter)
access_logger.setLevel(logging.INFO)
access_logger.addHandler(access_handler)
# === Warning Logger ===
warning_logger = logging.getLogger("warning_logger")
warning_handler = logging.FileHandler("logs/warnings.log")
warning_handler.setLevel(logging.WARNING) # WARNING, ERROR, CRITICAL
warning_handler.setFormatter(formatter)
warning_logger.setLevel(logging.WARNING)
warning_logger.addHandler(warning_handler)
# Optional: also log to console
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
app_logger.addHandler(console_handler)
error_logger.addHandler(console_handler)
access_logger.addHandler(console_handler)
warning_logger.addHandler(console_handler)