GPQBot

Форк
0
/
logger.py 
58 строк · 1.5 Кб
1
import logging
2
import sys
3
from typing import TYPE_CHECKING
4

5
from loguru import logger as _logger
6

7
from app.settings import settings
8

9
if TYPE_CHECKING:  # To avoid circular import
10
    from loguru import Logger
11

12

13

14
class InterceptHandler(logging.Handler):
15
    def emit(self, record):  # type: ignore
16
        # Get corresponding Loguru level if it exists
17
        try:
18
            level = logger.level(record.levelname).name
19
        except ValueError:
20
            level = record.levelno
21

22
        # Find caller from where originated the logged message
23
        frame, depth = logging.currentframe(), 2
24
        while frame.f_code.co_filename == logging.__file__:  # noqa: WPS352, WPS609
25
            frame = frame.f_back  # type: ignore [assignment]
26
            depth += 1
27

28
        logger.opt(depth=depth, exception=record.exc_info).log(
29
            level, record.getMessage()
30
        )
31

32

33
def setup_logger() -> "Logger":
34
    # Remove every logger's handlers and propagate to root logger
35
    for name in logging.root.manager.loggerDict.keys():
36
        logging.getLogger(name).handlers = []
37
        logging.getLogger(name).propagate = True
38

39
    # Intercept everything at the root logger
40
    logging.basicConfig(handlers=[InterceptHandler()], level=0)
41

42
    # Enable pybotx logger
43
    _logger.enable("pybotx")
44

45
    # Setup loguru main logger
46
    _logger.configure(
47
        handlers=[
48
            {
49
                "sink": sys.stdout,
50
                "level": logging.DEBUG if settings.DEBUG else logging.INFO,
51
            }
52
        ],
53
    )
54

55
    return _logger
56

57

58
logger = setup_logger()

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.