Initial commit
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
"""
|
||||
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)
|
||||
Reference in New Issue
Block a user