Files
parser-v1/logger_setup.py
T
Aks f78f35fb3f init: Parser v1 — Lead Generation Engine
Парсер лидов МБ РФ: Яндекс.Карты + HH.ru + обогащение DaData/ЕГРЮЛ/Rusprofile + Streamlit CRM.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 12:56:06 +03:00

88 lines
3.0 KiB
Python

"""Единая настройка логгера — цветной вывод через colorlog.
Использование:
from logger_setup import setup_logger
logger = setup_logger("main")
Цвета по уровню:
DEBUG — серый
INFO — зелёный
WARNING — жёлтый
ERROR — красный
CRITICAL — пурпурный (фон)
Если colorlog не установлен — fallback на обычный logging без цвета.
"""
import logging
import sys
def setup_logger(name: str = "parser", level: int = logging.INFO) -> logging.Logger:
"""Настроить и вернуть логгер с цветным выводом."""
logger = logging.getLogger(name)
if logger.handlers:
# Уже настроен — не плодим хендлеры
return logger
logger.setLevel(level)
logger.propagate = False # не дублируем в root logger
handler = logging.StreamHandler(stream=sys.stdout) # stdout — PyCharm не красит красным
try:
from colorlog import ColoredFormatter
formatter = ColoredFormatter(
"%(log_color)s%(asctime)s | %(levelname)-7s%(reset)s | %(message)s",
datefmt="%H:%M:%S",
log_colors={
"DEBUG": "cyan",
"INFO": "green",
"WARNING": "yellow",
"ERROR": "red",
"CRITICAL": "red,bg_white",
},
)
except ImportError:
# colorlog не установлен — обычный формат без цветов
formatter = logging.Formatter(
"%(asctime)s | %(levelname)-7s | %(message)s",
datefmt="%H:%M:%S",
)
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger
def configure_root_logger(level: int = logging.INFO) -> None:
"""Перенастроить root logger — подхватят все модули которые используют logging.getLogger()."""
root = logging.getLogger()
# Убираем существующие хендлеры (basicConfig мог их добавить)
for h in list(root.handlers):
root.removeHandler(h)
root.setLevel(level)
handler = logging.StreamHandler(stream=sys.stdout)
try:
from colorlog import ColoredFormatter
formatter = ColoredFormatter(
"%(log_color)s%(asctime)s | %(levelname)-7s%(reset)s | %(name)s | %(message)s",
datefmt="%H:%M:%S",
log_colors={
"DEBUG": "cyan",
"INFO": "green",
"WARNING": "yellow",
"ERROR": "red",
"CRITICAL": "red,bg_white",
},
)
except ImportError:
formatter = logging.Formatter(
"%(asctime)s | %(levelname)-7s | %(name)s | %(message)s",
datefmt="%H:%M:%S",
)
handler.setFormatter(formatter)
root.addHandler(handler)