init: Parser v1 — Lead Generation Engine
Парсер лидов МБ РФ: Яндекс.Карты + HH.ru + обогащение DaData/ЕГРЮЛ/Rusprofile + Streamlit CRM. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
"""Единая настройка логгера — цветной вывод через 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)
|
||||
Reference in New Issue
Block a user