72 lines
2.3 KiB
Python
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"]
|