54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
"""
|
|
Logger utilities to prevent conflicts between different logging configurations.
|
|
"""
|
|
|
|
from loguru import logger
|
|
import sys
|
|
|
|
|
|
def safe_logger_config(format_string: str, level: str = "INFO"):
|
|
"""
|
|
Safely configure logger without removing existing handlers.
|
|
This prevents conflicts with the main logging configuration.
|
|
|
|
Args:
|
|
format_string: Log format string
|
|
level: Log level
|
|
"""
|
|
try:
|
|
# Only add a new handler if we don't already have one with this format
|
|
existing_handlers = logger._core.handlers
|
|
for handler in existing_handlers:
|
|
if hasattr(handler, '_sink') and handler._sink == sys.stdout:
|
|
# Check if format is similar to avoid duplicates
|
|
if hasattr(handler, '_format') and handler._format == format_string:
|
|
return # Handler already exists with this format
|
|
|
|
# Add new handler only if needed
|
|
logger.add(
|
|
sys.stdout,
|
|
level=level,
|
|
format=format_string,
|
|
colorize=True
|
|
)
|
|
except Exception as e:
|
|
# If there's any error, just use the existing logger configuration
|
|
pass
|
|
|
|
|
|
def get_service_logger(service_name: str, format_string: str = None):
|
|
"""
|
|
Get a logger for a specific service without conflicting with main configuration.
|
|
|
|
Args:
|
|
service_name: Name of the service
|
|
format_string: Optional custom format string
|
|
|
|
Returns:
|
|
Logger instance
|
|
"""
|
|
if format_string:
|
|
safe_logger_config(format_string)
|
|
|
|
return logger.bind(service=service_name)
|