File size: 1,625 Bytes
ec855e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# app/logger.py
"""

Structured, colorized logger used across the app.



- Uses colorlog to add color to log levels in console.

- Central logger configuration prevents duplicate handlers.

"""

import logging
import sys
from typing import Optional

import colorlog
from .config import settings


def get_logger(name: Optional[str] = None) -> logging.Logger:
    logger = logging.getLogger(name)
    if logger.handlers:
        # already configured
        return logger

    # Get level from settings or default to INFO
    log_level_str = settings.LOG_LEVEL.upper()
    level = getattr(logging, log_level_str, logging.INFO)

    # Console Handler with Color
    handler = colorlog.StreamHandler(stream=sys.stdout)
    handler.setLevel(level)

    # Enhanced Formatter with better spacing and colors
    formatter = colorlog.ColoredFormatter(
        "%(log_color)s%(levelname)-8s%(reset)s | %(log_color)s%(asctime)s%(reset)s | %(cyan)s%(name)s%(reset)s | %(message)s",
        datefmt="%H:%M:%S",
        log_colors={
            "DEBUG": "blue",
            "INFO": "green",
            "WARNING": "yellow",
            "ERROR": "bold_red",
            "CRITICAL": "bold_red,bg_white",
        },
        secondary_log_colors={
            "message": {
                "ERROR": "red",
                "CRITICAL": "red",
            }
        },
        style="%"
    )
    handler.setFormatter(formatter)

    logger.setLevel(level)
    logger.addHandler(handler)
    logger.propagate = False
    return logger


# Global app logger
logger = get_logger("bge-server")