AgentOccam/Agent_E/ae/utils/logger.py
2025-01-22 11:32:35 -08:00

72 lines
2.3 KiB
Python

import logging
import os
from dotenv import load_dotenv
from pythonjsonlogger import jsonlogger
# Load environment variables from a .env file
load_dotenv()
logger = logging.getLogger(__name__)
# Custom function to configure the logger
def configure_logger(level: str = "INFO") -> None:
log_format = os.getenv("LOG_MESSAGES_FORMAT", "text").lower()
# Set log level for the main logger
logger.setLevel(level.upper())
# Create a handler for logging
handler = logging.StreamHandler()
if log_format == "json":
# JSON format
formatter = jsonlogger.JsonFormatter(
fmt='%(asctime)s %(name)s %(levelname)s %(message)s %(filename)s %(lineno)d',
datefmt='%Y-%m-%d %H:%M:%S'
)
else:
# Text format
formatter = logging.Formatter(
fmt='[%(asctime)s] %(levelname)s {%(filename)s:%(lineno)d} - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
handler.setFormatter(formatter)
logger.handlers = [] # Clear existing handlers
logger.addHandler(handler)
# Ensure other loggers have the same handler
http_loggers = ["openai", "autogen"]
for http_logger in http_loggers:
lib_logger = logging.getLogger(http_logger)
lib_logger.setLevel(logging.DEBUG)
lib_logger.handlers = [] # Clear any existing handlers
lib_logger.addHandler(handler) # Add the same handler
# Call the configure logger function to set up the logger initially
configure_logger(level="INFO")
# Function to set log level
def set_log_level(level: str) -> None:
"""
Set the log level for the logger.
Parameters:
- level (str): A logging level such as 'debug', 'info', 'warning', 'error', or 'critical'.
"""
configure_logger(level)
# Set default log levels for other libraries
# logging.getLogger("httpcore").setLevel(logging.DEBUG)
# logging.getLogger("httpx").setLevel(logging.DEBUG)
# logging.getLogger("openai").setLevel(logging.DEBUG)
# logging.getLogger("autogen").setLevel(logging.DEBUG)
logging.getLogger("matplotlib.pyplot").setLevel(logging.WARNING)
logging.getLogger("PIL.PngImagePlugin").setLevel(logging.WARNING)
logging.getLogger("PIL.Image").setLevel(logging.WARNING)
# Re-export the logger for ease of use
__all__ = ["logger", "set_log_level"]