Skip to main content

Простой и мощный логгер для Python с цветным выводом

Project description

FancyLogger

Python License PyPI

Улучшенный логгер для Python приложений с поддержкой цветного вывода, JSON форматирования и гибкой конфигурацией.

🚀 Основные возможности

  • Цветной вывод в консоль с поддержкой Rich (опционально)
  • Несколько режимов работы: консоль, файл, или оба
  • JSON логирование для структурированных данных
  • Ротация файлов по размеру и времени
  • Thread-safe операции
  • Раздельные уровни для консоли и файла
  • Контекстные данные в логах
  • Простая конфигурация через словари
  • Минимальные зависимости (Rich опционально)

📦 Установка

Базовая установка

pip install fancy-logger

С поддержкой Rich (рекомендуется)

pip install fancy-logger[rich]

Для разработки

pip install fancy-logger[dev]

🎯 Быстрый старт

Базовое использование

from fancy_logger import get_logger

# Создание логгера
logger = get_logger("my_app")

# Основные методы
logger.info("Приложение запущено")
logger.warning("Предупреждение")
logger.error("Произошла ошибка")

# Цветные методы
logger.success("Операция завершена успешно!")
logger.highlight("Важная информация")
logger.alert("Требуется внимание")
logger.fail("Критическая ошибка")

Конфигурация режимов

from fancy_logger import FancyLogger, LogMode, LogLevel

# Только в консоль
console_logger = FancyLogger(
    name="console_app",
    mode=LogMode.CONSOLE_ONLY,
    level=LogLevel.DEBUG
)

# Только в файл
file_logger = FancyLogger(
    name="file_app", 
    mode=LogMode.FILE_ONLY,
    log_dir="./logs"
)

# В консоль и файл с разными уровнями
mixed_logger = FancyLogger(
    name="mixed_app",
    mode=LogMode.BOTH,
    console_level=LogLevel.INFO,
    file_level=LogLevel.WARNING
)

JSON логирование

from fancy_logger import FancyLogger, OutputFormat

# JSON в файл, обычный текст в консоль
logger = FancyLogger(
    name="api_server",
    file_format=OutputFormat.JSON,
    console_format=OutputFormat.TEXT
)

# Логирование с контекстными данными
logger.info("Пользователь авторизован", extra={
    "user_id": 12345,
    "email": "user@example.com", 
    "ip": "192.168.1.1",
    "action": "login"
})

Конфигурация из словаря

config = {
    'name': 'web_app',
    'mode': 'both',
    'level': 20,  # INFO
    'console_level': 20,  # INFO
    'file_level': 30,     # WARNING
    'log_dir': './logs',
    'file_format': 'json',
    'console_format': 'text',
    'use_rich': True,
    'max_file_size': 5 * 1024 * 1024,  # 5MB
    'backup_count': 3
}

logger = FancyLogger.configure_from_dict(config)

📋 Примеры использования

Веб-приложение

from fancy_logger import FancyLogger, LogMode, OutputFormat

# Настройка логгера для веб-приложения
app_logger = FancyLogger(
    name="webapp",
    mode=LogMode.BOTH,
    console_level=LogLevel.INFO,
    file_level=LogLevel.WARNING,
    file_format=OutputFormat.JSON,
    log_dir="./logs",
    max_file_size=10 * 1024 * 1024,  # 10MB
    backup_count=5
)

def handle_request(user_id, endpoint):
    app_logger.info("Обработка запроса", extra={
        "user_id": user_id,
        "endpoint": endpoint,
        "timestamp": datetime.now().isoformat()
    })
    
    try:
        # Обработка запроса
        result = process_request(endpoint)
        app_logger.success(f"Запрос обработан: {endpoint}")
        return result
    except Exception as e:
        app_logger.fail(f"Ошибка обработки: {e}", exc_info=True)
        raise

Микросервис с разными компонентами

# Основной логгер приложения
main_logger = get_logger("service")

# Специализированные логгеры
db_logger = FancyLogger("service.database", mode=LogMode.FILE_ONLY)
api_logger = FancyLogger("service.api", console_level=LogLevel.DEBUG)
auth_logger = FancyLogger("service.auth", file_format=OutputFormat.JSON)

# Использование
def authenticate_user(token):
    auth_logger.info("Проверка токена", extra={"token_hash": hash(token)})
    
    if not validate_token(token):
        auth_logger.alert("Недействительный токен")
        return False
        
    auth_logger.success("Пользователь авторизован")
    return True

def database_query(query):
    db_logger.debug(f"Выполнение запроса: {query}")
    
    try:
        result = execute_query(query)
        db_logger.info(f"Запрос выполнен, строк: {len(result)}")
        return result
    except Exception as e:
        db_logger.error(f"Ошибка БД: {e}", exc_info=True)
        raise

Обработка исключений

logger = get_logger("error_handler")

def safe_operation():
    try:
        risky_operation()
        logger.success("Операция выполнена успешно")
    except ValueError as e:
        logger.alert(f"Некорректные данные: {e}")
        return None
    except ConnectionError as e:
        logger.fail(f"Ошибка соединения: {e}", exc_info=True)
        raise
    except Exception as e:
        logger.critical(f"Неожиданная ошибка: {e}", exc_info=True)
        raise

🔧 API Reference

Основные классы

FancyLogger

Основной класс логгера.

Параметры конструктора:

  • name: str - имя логгера
  • mode: LogMode - режим работы (CONSOLE_ONLY, FILE_ONLY, BOTH)
  • level: LogLevel - базовый уровень логирования
  • console_level: LogLevel - уровень для консоли
  • file_level: LogLevel - уровень для файла
  • log_dir: str | Path - директория для логов
  • file_format: OutputFormat - формат файловых логов
  • console_format: OutputFormat - формат консольных логов
  • use_rich: bool - использовать Rich для цветного вывода
  • max_file_size: int - максимальный размер файла (байты)
  • backup_count: int - количество backup файлов
  • custom_format: str - кастомный формат сообщений

Методы логирования

# Стандартные методы
logger.debug(message, extra=None, **kwargs)
logger.info(message, extra=None, **kwargs)
logger.warning(message, extra=None, **kwargs)
logger.error(message, extra=None, exc_info=False, **kwargs)
logger.critical(message, extra=None, exc_info=True, **kwargs)

# Цветные методы
logger.success(message, extra=None, **kwargs)  # Зеленый с ✓
logger.highlight(message, extra=None, **kwargs)  # Синий с →
logger.alert(message, extra=None, **kwargs)    # Желтый с ⚠
logger.fail(message, extra=None, **kwargs)     # Красный с ✗

Enum классы

class LogLevel(Enum):
    DEBUG = logging.DEBUG
    INFO = logging.INFO
    WARNING = logging.WARNING
    ERROR = logging.ERROR
    CRITICAL = logging.CRITICAL

class LogMode(Enum):
    CONSOLE_ONLY = "console"
    FILE_ONLY = "file"
    BOTH = "both"

class OutputFormat(Enum):
    TEXT = "text"
    JSON = "json"

Вспомогательные функции

# Быстрое создание логгера
get_logger(name: str, **kwargs) -> FancyLogger

# Базовая настройка
setup_basic_logger(name: str, level: str) -> FancyLogger

🧪 Тестирование

# Запуск всех тестов
pytest

# С покрытием кода
pytest --cov=fancy_logger

# Только быстрые тесты
pytest -m "not slow"

🛣️ Roadmap

  • Поддержка асинхронного логирования
  • Интеграция с популярными фреймворками (FastAPI, Django)
  • Отправка логов в внешние системы (Elasticsearch, Sentry)
  • Веб-интерфейс для просмотра логов
  • Метрики и мониторинг

🤝 Участие в разработке

  1. Fork репозитория
  2. Создайте feature branch (git checkout -b feature/amazing-feature)
  3. Commit изменения (git commit -m 'Add amazing feature')
  4. Push в branch (git push origin feature/amazing-feature)
  5. Создайте Pull Request

Требования к коду

  • Код должен проходить black, flake8 и mypy
  • Все новые функции должны быть покрыты тестами
  • Документация должна быть обновлена

📝 Changelog

v1.0.0

  • Первый релиз
  • Базовая функциональность логирования
  • Поддержка Rich и JSON форматирования
  • Thread-safe операции
  • Конфигурация через словари

📄 Лицензия

Этот проект распространяется под лицензией MIT. Подробности в файле LICENSE.

🙏 Благодарности

  • Rich - за отличную библиотеку для цветного вывода
  • Python Logging - за базовую функциональность логирования
  • Сообщество Python за вдохновение и обратную связь

Создано с ❤️ для Python сообщества

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fnclogger-1.0.0.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fnclogger-1.0.0-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file fnclogger-1.0.0.tar.gz.

File metadata

  • Download URL: fnclogger-1.0.0.tar.gz
  • Upload date:
  • Size: 10.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for fnclogger-1.0.0.tar.gz
Algorithm Hash digest
SHA256 ac45fc80557be694cd4375e9fe0b428dc436de54e016ba0c4c32c6a0bc774a51
MD5 3fbf3142492f337a3897bce774232c36
BLAKE2b-256 2c3c4d0665663c7e1828749dde90545673e7a87eee549c0457d6d2bba1decef4

See more details on using hashes here.

File details

Details for the file fnclogger-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: fnclogger-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for fnclogger-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fbbf1ff9915b21ec02c3c57145d61af49617b7fb27e04ac994483436800ed6dc
MD5 faecd8891d5ea3141d9b4daee2d459e4
BLAKE2b-256 59fda093ee61ce3185548a73522e37330137e0a8da24cb914bf0361eeb4a1a8c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page