Files
2025-04-09 09:34:15 +02:00

72 lines
2.2 KiB
Python

"""
Logging utilities for the Edison application.
"""
import logging
import os
import sys
def setup_logging(verbose=False):
"""
Configure logging for the application.
Args:
verbose: If True, enable DEBUG level messages. If False, show only WARNING and above.
Returns:
logging.Logger: The configured logger.
"""
# Create logs directory if it doesn't exist
script_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
logs_dir = os.path.join(script_dir, "logs")
os.makedirs(logs_dir, exist_ok=True)
# Determine log levels based on verbose flag
# Always save INFO+ logs to file, but console output depends on verbose flag
file_level = logging.INFO
console_level = logging.DEBUG if verbose else logging.WARNING
# Configure file and console handlers with different levels
file_handler = logging.FileHandler(os.path.join(logs_dir, 'edison.log'))
file_handler.setLevel(file_level)
console_handler = logging.StreamHandler(sys.stderr)
console_handler.setLevel(console_level)
# We need to set the root logger level to the lowest of our handlers
root_level = logging.DEBUG if verbose else logging.INFO
# Basic config with handlers
logging.basicConfig(
level=root_level,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[file_handler, console_handler]
)
# Always disable httpx and urllib3 debug logs unless in verbose mode
if not verbose:
logging.getLogger("httpx").setLevel(logging.WARNING)
logging.getLogger("urllib3").setLevel(logging.WARNING)
# Get the main application logger
logger = logging.getLogger('edison')
# Log setup confirmation at appropriate level
if verbose:
logger.debug("Verbose logging enabled (DEBUG level)")
else:
logger.info("Standard logging configuration applied (INFO to file, WARNING to console)")
return logger
def get_logger(name):
"""
Get a logger for the specified name.
Args:
name: The name of the logger.
Returns:
logging.Logger: The logger.
"""
return logging.getLogger(name)