83 lines
2.6 KiB
Python
83 lines
2.6 KiB
Python
import logging
|
|
import sys
|
|
from typing import Optional
|
|
|
|
class ColoredFormatter(logging.Formatter):
|
|
"""Custom formatter with colors for different log levels"""
|
|
|
|
# ANSI color codes
|
|
GREY = '\033[90m'
|
|
GREEN = '\033[92m'
|
|
YELLOW = '\033[93m'
|
|
RED = '\033[91m'
|
|
BOLD_RED = '\033[1;91m'
|
|
RESET = '\033[0m'
|
|
|
|
def format(self, record):
|
|
# Add color based on log level
|
|
if record.levelno == logging.DEBUG:
|
|
color = self.GREY
|
|
elif record.levelno == logging.INFO:
|
|
color = self.GREEN
|
|
elif record.levelno == logging.WARNING:
|
|
color = self.YELLOW
|
|
elif record.levelno in (logging.ERROR, logging.CRITICAL):
|
|
color = self.RED
|
|
else:
|
|
color = self.RESET
|
|
|
|
# Format the message with color
|
|
message = super().format(record)
|
|
return f"{color}{message}{self.RESET}"
|
|
|
|
def setup_logging(logger_name: str = __name__,
|
|
log_file: str = 'connection_monitor.log',
|
|
console_level: int = logging.DEBUG,
|
|
file_level: int = logging.DEBUG) -> logging.Logger:
|
|
"""
|
|
Configure logging with console and file handlers
|
|
|
|
Args:
|
|
logger_name: Name of the logger
|
|
log_file: Path to log file
|
|
console_level: Log level for console output
|
|
file_level: Log level for file output
|
|
|
|
Returns:
|
|
Configured logger instance
|
|
"""
|
|
logger = logging.getLogger(logger_name)
|
|
logger.setLevel(logging.DEBUG)
|
|
|
|
# Remove any existing handlers
|
|
logger.handlers = []
|
|
|
|
# Console handler with colors
|
|
console_handler = logging.StreamHandler(sys.stdout)
|
|
console_handler.setLevel(console_level)
|
|
console_handler.setFormatter(ColoredFormatter(
|
|
'%(asctime)s - %(levelname)s: %(message)s',
|
|
datefmt='%Y-%m-%d %H:%M:%S'
|
|
))
|
|
|
|
# File handler (no colors)
|
|
file_handler = logging.FileHandler(log_file)
|
|
file_handler.setLevel(file_level)
|
|
file_handler.setFormatter(logging.Formatter(
|
|
'%(asctime)s - %(levelname)s: %(message)s',
|
|
datefmt='%Y-%m-%d %H:%M:%S'
|
|
))
|
|
|
|
# Add both handlers
|
|
logger.addHandler(console_handler)
|
|
logger.addHandler(file_handler)
|
|
|
|
return logger
|
|
|
|
def configure_third_party_logging():
|
|
"""Configure logging for third-party libraries"""
|
|
try:
|
|
logging.getLogger('urllib3').setLevel(logging.WARNING)
|
|
logging.getLogger('requests').setLevel(logging.WARNING)
|
|
except Exception as e:
|
|
logging.getLogger(__name__).error(f"Failed to configure additional logging: {e}") |