File size: 1,212 Bytes
8a2dcce
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
Centralized logging setup.

Every module does `from logs.logger import get_logger` and
`logger = get_logger(__name__)` rather than configuring logging itself.
Writes to both console and logs/app.log (paths from config.py).
"""

import logging
import os
import sys

import config

_CONFIGURED = False


def _configure_root():
    global _CONFIGURED
    if _CONFIGURED:
        return

    os.makedirs(config.LOG_DIR, exist_ok=True)

    root = logging.getLogger("dsa_chatbot")
    root.setLevel(config.LOG_LEVEL)
    root.propagate = False

    formatter = logging.Formatter(
        "%(asctime)s | %(levelname)-8s | %(name)s | %(message)s"
    )

    if not root.handlers:
        stream_handler = logging.StreamHandler(sys.stdout)
        stream_handler.setFormatter(formatter)
        root.addHandler(stream_handler)

        file_handler = logging.FileHandler(config.LOG_FILE_PATH, encoding="utf-8")
        file_handler.setFormatter(formatter)
        root.addHandler(file_handler)

    _CONFIGURED = True


def get_logger(name: str) -> logging.Logger:
    """Returns a named logger nested under the shared 'dsa_chatbot' root."""
    _configure_root()
    return logging.getLogger(f"dsa_chatbot.{name}")