Compare commits
3 Commits
762b4ed6cc
...
5362e68eab
| Author | SHA1 | Date | |
|---|---|---|---|
| 5362e68eab | |||
| c042e50267 | |||
| 80c302278e |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -40,6 +40,7 @@ logs/
|
|||||||
*.log
|
*.log
|
||||||
metrics.log
|
metrics.log
|
||||||
|
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# Файлы IDE и редакторов
|
# Файлы IDE и редакторов
|
||||||
# У каждого разработчика могут быть свои настройки.
|
# У каждого разработчика могут быть свои настройки.
|
||||||
|
|||||||
@@ -1,29 +1,70 @@
|
|||||||
import sys
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
from .config import settings
|
from .config import settings
|
||||||
|
|
||||||
def setup_logging():
|
def setup_logging():
|
||||||
"""
|
"""
|
||||||
Настраивает Loguru для вывода в консоль и в файл с ротацией.
|
Настройка Loguru:
|
||||||
|
- Раздельные потоки INFO/ERROR в консоли.
|
||||||
|
- Ротируемые файлы для всех логов и только для ошибок.
|
||||||
|
- JSON-формат для интеграций.
|
||||||
"""
|
"""
|
||||||
logger.remove() # удаляем стандартный обработчик
|
logger.remove() # Удаляем стандартный обработчик
|
||||||
|
|
||||||
# Настраиваем логирование в консоль (stderr) с цветом
|
# Создаём папку для логов, если её нет
|
||||||
|
Path("logs").mkdir(exist_ok=True)
|
||||||
|
|
||||||
|
# 1. Консоль: INFO и ниже -> stdout (стандартный вывод)
|
||||||
|
logger.add(
|
||||||
|
sys.stdout,
|
||||||
|
level="INFO",
|
||||||
|
format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level:<8}</level> | {message}",
|
||||||
|
colorize=True,
|
||||||
|
filter=lambda record: record["level"].no < 40 # Все уровни ниже ERROR
|
||||||
|
)
|
||||||
|
|
||||||
|
# 2. Консоль: ERROR и выше -> stderr (поток ошибок)
|
||||||
logger.add(
|
logger.add(
|
||||||
sys.stderr,
|
sys.stderr,
|
||||||
level=settings.LOG_LEVEL.upper(),
|
level="ERROR",
|
||||||
format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <level>{message}</level>",
|
format="<red>{time:YYYY-MM-DD HH:mm:ss}</red> | <level>{level:<8}</level> | {message}",
|
||||||
colorize=True
|
colorize=True
|
||||||
)
|
)
|
||||||
|
|
||||||
# Настраиваем логирование в файл
|
# 3. Файл для ВСЕХ логов
|
||||||
logger.add(
|
logger.add(
|
||||||
"metrics.log", # Имя файла
|
"logs/metrics.log",
|
||||||
level=settings.LOG_LEVEL.upper(),
|
level=settings.LOG_LEVEL.upper(),
|
||||||
format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function} - {message}",
|
format="{time:YYYY-MM-DD HH:mm:ss} | {level:<8} | {name}:{function} - {message}",
|
||||||
rotation="1 MB", # Ротация, когда файл достигнет 1 MB
|
rotation="10 MB", # Ротация при достижении 10 MB
|
||||||
compression="zip", # Сжимать старые файлы логов в zip
|
retention="30 days", # Хранить файлы 30 дней
|
||||||
enqueue=True, # Делает запись безопасной для многопоточности
|
compression="zip",
|
||||||
backtrace=True, # Показывает полный стектрейс при ошибках
|
enqueue=True,
|
||||||
diagnose=True # Добавляет полезную информацию для отладки ошибок
|
backtrace=True,
|
||||||
|
diagnose=True
|
||||||
|
)
|
||||||
|
|
||||||
|
# 4. Отдельный файл ТОЛЬКО для ошибок
|
||||||
|
logger.add(
|
||||||
|
"logs/errors.log",
|
||||||
|
level="ERROR",
|
||||||
|
format="{time:YYYY-MM-DD HH:mm:ss} | {level:<8} | {name}:{function} - {message}",
|
||||||
|
rotation="5 MB",
|
||||||
|
retention="60 days", # Ошибки храним дольше
|
||||||
|
compression="zip",
|
||||||
|
enqueue=True,
|
||||||
|
backtrace=True,
|
||||||
|
diagnose=True
|
||||||
|
)
|
||||||
|
|
||||||
|
# 5. JSON-логи для систем сбора (ELK, Grafana Loki и т.д.)
|
||||||
|
logger.add(
|
||||||
|
"logs/metrics.json",
|
||||||
|
level=settings.LOG_LEVEL.upper(),
|
||||||
|
serialize=True, # Главный параметр для JSON
|
||||||
|
rotation="10 MB",
|
||||||
|
retention="30 days",
|
||||||
|
compression="zip",
|
||||||
|
enqueue=True
|
||||||
)
|
)
|
||||||
Reference in New Issue
Block a user