File size: 1,843 Bytes
6c983cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1709520
6c983cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1709520
6c983cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
Logging configuration for the detection demo application.
Provides centralized logging setup with proper formatting and levels.
"""

import logging
import sys


class LoggerManager:
    """Singleton logger manager for the application."""

    _instance = None
    _initialized = False

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

    def __init__(self):
        if not self._initialized:
            self._setup_default_logging()
            self._initialized = True

    def _setup_default_logging(self):
        """Setup default logging configuration."""
        # Create main logger
        self.logger = logging.getLogger()
        self.logger.setLevel(logging.INFO)

        # Prevent duplicate handlers
        if self.logger.handlers:
            return

        # Console handler
        console_handler = logging.StreamHandler(sys.stdout)
        console_handler.setLevel(logging.INFO)
        console_formatter = logging.Formatter(
            fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
            datefmt="%H:%M:%S",
        )
        console_handler.setFormatter(console_formatter)
        self.logger.addHandler(console_handler)

    def get_logger(self, name: str = None) -> logging.Logger:
        """Get a logger instance."""
        if name:
            return logging.getLogger(name)
        return self.logger


# Global logger manager instance
_logger_manager = LoggerManager()


def get_logger(name: str = None) -> logging.Logger:
    """
    Get a logger instance for the application.

    Args:
        name: Optional module name (will be prefixed with app name)

    Returns:
        Logger instance
    """
    return _logger_manager.get_logger(name)


# Module-level logger
logger = get_logger(__name__)