72 lines
2.2 KiB
Python
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)
|