File size: 3,883 Bytes
141cd60 ce00133 8e4018d 141cd60 a6f0289 141cd60 a6f0289 141cd60 a6f0289 141cd60 a6f0289 141cd60 a6f0289 141cd60 a6f0289 141cd60 a6f0289 141cd60 a6f0289 141cd60 a6f0289 141cd60 a6f0289 141cd60 a6f0289 141cd60 a6f0289 141cd60 436bd7b 141cd60 ce00133 141cd60 ce00133 141cd60 ce00133 141cd60 ce00133 141cd60 ce00133 1c0efba 141cd60 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
"""
Logging utilities for the MONA application
Fixed version with all required functions
"""
import logging
import os
import sys
from datetime import datetime
from pathlib import Path
def setup_logging(log_level=logging.INFO, log_file=None):
"""
Set up logging configuration
Args:
log_level: Logging level (default: INFO)
log_file: Optional log file path
"""
# Create logs directory if it doesn't exist
if log_file:
log_dir = Path(log_file).parent
log_dir.mkdir(exist_ok=True)
# Configure logging format
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
# Set up root logger
root_logger = logging.getLogger()
root_logger.setLevel(log_level)
# Clear existing handlers
root_logger.handlers.clear()
# Console handler
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(formatter)
root_logger.addHandler(console_handler)
# File handler if specified
if log_file:
file_handler = logging.FileHandler(log_file)
file_handler.setFormatter(formatter)
root_logger.addHandler(file_handler)
def get_logger(name=None):
"""
Get a logger instance
Args:
name: Logger name (default: __name__)
Returns:
logging.Logger: Logger instance
"""
if name is None:
name = __name__
logger = logging.getLogger(name)
# If no handlers are set up, set up basic logging
if not logger.handlers and not logging.getLogger().handlers:
setup_logging()
return logger
def log_error(message, error=None, extra_data=None):
"""
Log error messages with optional error details and extra data
Args:
message (str): The error message to log
error (Exception, optional): The exception object if available
extra_data (dict, optional): Additional data to include in log
"""
logger = get_logger()
if error:
error_msg = f"{message}: {str(error)}"
if hasattr(error, '__traceback__'):
import traceback
error_msg += f"\nTraceback: {traceback.format_exc()}"
else:
error_msg = message
if extra_data:
logger.error(error_msg, extra=extra_data)
else:
logger.error(error_msg)
def log_warning(message, extra_data=None):
"""
Log warning messages
Args:
message (str): The warning message to log
extra_data (dict, optional): Additional data to include in log
"""
logger = get_logger()
if extra_data:
logger.warning(message, extra=extra_data)
else:
logger.warning(message)
def log_info(message, extra_data=None):
"""
Log info messages
Args:
message (str): The info message to log
extra_data (dict, optional): Additional data to include in log
"""
logger = get_logger()
if extra_data:
logger.info(message, extra=extra_data)
else:
logger.info(message)
def log_debug(message, extra_data=None):
"""
Log debug messages
Args:
message (str): The debug message to log
extra_data (dict, optional): Additional data to include in log
"""
logger = get_logger()
if extra_data:
logger.debug(message, extra=extra_data)
else:
logger.debug(message)
def log_exception(message, exc_info=True):
"""
Log exceptions with full traceback
Args:
message (str): The exception message to log
exc_info (bool): Whether to include exception info
"""
logger = get_logger()
logger.exception(message, exc_info=exc_info)
# Initialize logging when module is imported
if __name__ != "__main__":
setup_logging() |