{"id":21216028,"url":"https://github.com/usetech/labelgun","last_synced_at":"2026-02-16T00:03:57.414Z","repository":{"id":48588459,"uuid":"291758297","full_name":"Usetech/labelgun","owner":"Usetech","description":null,"archived":false,"fork":false,"pushed_at":"2022-11-24T21:08:14.000Z","size":85,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-07-10T16:46:04.571Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Usetech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-08-31T15:49:58.000Z","updated_at":"2023-05-26T08:54:56.000Z","dependencies_parsed_at":"2023-01-22T12:30:45.341Z","dependency_job_id":null,"html_url":"https://github.com/Usetech/labelgun","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Usetech/labelgun","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Usetech%2Flabelgun","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Usetech%2Flabelgun/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Usetech%2Flabelgun/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Usetech%2Flabelgun/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Usetech","download_url":"https://codeload.github.com/Usetech/labelgun/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Usetech%2Flabelgun/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29494238,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T00:00:57.352Z","status":"ssl_error","status_checked_at":"2026-02-15T23:56:34.338Z","response_time":118,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-20T21:49:13.011Z","updated_at":"2026-02-16T00:03:57.386Z","avatar_url":"https://github.com/Usetech.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"labelgun\n========\n\nlabelgun - это библиотека позволяющая в декларативном стиле объявлять события обрабатывающиеся в системе.\n\n\n# Содержание\n\n- [Установка](#Установка)\n  \n- [Внедрение в проект](#Внедрение-в-проект)\n  \n- [Потенциальные проблемы](#Потенциальные-проблемы)\n   \n   - [Name clash](#Name-clash)\n   \n- [Разработка](#Разработка)\n\n    - [Настройка окружения](#Настройка-окружения)\n    - [Сборка дистрибутива](#Сборка-дистрибутива)\n    - [Генерация setup.py](#Генерация-setup.py)\n    \n- [Документация](#Документация)\n\n\n\u003ca name='Установка'\u003e\u003c/a\u003e\n## Установка\n\n- Установка базовой версии библиотеки\n\n  pip\n  \n  ```\n  pip install git+https://gitlab.usetech.ru/pub/labelgun.git\n  \n  Установка заданной версии\n  pip install git+https://gitlab.usetech.ru/pub/labelgun.git@\u003ctag\u003e\n  ```\n  \n  poetry\n  \n  ```\n  poetry add git+https://gitlab.usetech.ru/pub/labelgun.git\n  ```\n   \n- Установка библиотеки с зависимостями необходимыми для организации логирования\n\n  pip\n  \n  ```\n  pip install git+https://gitlab.usetech.ru/pub/labelgun.git#egg=labelgun[logger]\n  \n  Установка заданной версии\n  pip install git+https://gitlab.usetech.ru/pub/labelgun.git@\u003ctag\u003e#egg=labelgun[logger]\n  ```\n  \n  poetry\n  \n  ```\n  poetry add git+https://gitlab.usetech.ru/pub/labelgun.git -E logger\n  ```\n\n**Extra Requirements**\n\n- logger - устанавливает зависимости необходимые для организации логирования\n- dev - устанавливает зависимости необходимые для разработки\n\n**Важное замечание**\n\nЕсли вы пытаетесь установить библиотеку из git при помощи poetry, убедитесь, что версия poetry у вас 1.1.5 или выше.\nС младшими версиями могут возникать проблемы. Это связано с несколькими багами, которые были исправлены в последних \nверсиях.\n\n\n\u003ca name='Внедрение-в-проект'\u003e\u003c/a\u003e\n## Внедрение в проект\n\nНовые библиотеки внедрять в проект всегда тяжело, по этому, мы подготовили 2 простых проекта, которые показывают как \nвыполняется интеграция библиотеки и как ее можно использовать. \n\nВ этих проектах вы сможете найти примеры того как реализовать интеграцию structlog и logging, как реализовать \nлогирование в json, а так же как применять labelgun для структурирования логов.\n\n\n**Чистый python проект**\n\nПроект вы можете найти в папке `example/integrate_with_logging`. \n\nЕсли вас интересует, как выполняется интеграция с logging и как конфигурируется подсистема логирования, то необходимо \nпосмотреть содержимое `examples/integrate_with_logging/logger.py`. \n\nДля внедрения данного кода к себе в проект, нужно просто скопировать модуль `logger.py` в целевой проект и в точке \nвхода добавить вызов `init_logger`.\n\n\n**Django проект**\n\nПроект вы можете найти в папке `example/integrate_with_django`.\n\nКак и в любом django проекте, конфигурирование логирования производится в settings.py, в разделе `Logger`. Начало и \nконец этого раздела отделены от остальных настроек строкой из тире. \n\nЕсли вам нужно интегрировать логирование в свой проект, то можете просто скопировать содержимое раздела `Logger` и \nвставить его у себя.\n\n\n\u003ca name='Потенциальные-проблемы'\u003e\u003c/a\u003e\n## Потенциальные проблемы\n\n\u003ca name='Name-clash'\u003e\u003c/a\u003e\n### Name clash\n\nПри использовании библиотеки нужно быть осторожным с передачей параметров логгеру:\n\n```python\nclass UserEvent(Label):\n    LEVEL_UP = \"Обновляем уровень пользователю\"\n\ndef update_user_level(**params):\n    if 'level' not in params:\n        params['level'] = calculate_new_level_for(user)\n    logger.log(**UserEvent.LEVEL_UP, **params)\n    print('level up!')\n```\n\nПодобный код полностью перезапишет параметр level для логгера. Следовательно,\nнужно следить за передачей в structlog переменных, совпадающих по имени с переменными\nсобытий: `label.category`, `event`, `label.description`, `level`.\n\nИмена `event` и `level` не имеют префиксов, т.к. требуются для передачи логгеру.\n\n\n\u003ca name='Разработка'\u003e\u003c/a\u003e\n## Разработка\n\n\u003ca name='Настройка-окружения'\u003e\u003c/a\u003e\n### Настройка окружения\n\nУстановка зависимостей\n\n```\npoetry install -E logger\n```\n\n\u003ca name='Сборка-дистрибутива'\u003e\u003c/a\u003e\n### Сборка дистрибутива\n\n```\nmake build\n```\n\n\u003ca name='Генерация-setup.py'\u003e\u003c/a\u003e\n### Генерация setup.py\n\nПосле каждого обновления pyproject.toml необходимо обновлять файл setup.py, чтобы была возможность установить библиотеку\nиз git репозитория и проекты не использующие poetry могли использовать ее.\n\nСделать это можно при помощи команды:\n\n```\nmake build-setuppy\n```\n\n\n\n\u003ca name='Документация'\u003e\u003c/a\u003e\n## Документация\n\n**structlog processor**\n\n`labelgun.integrations.structlog_utils.dict_msg_processor`\n\nПозволяет переложить конвертацию данных в строку на Formatter библиотеки logging. Данная возможность полезна при \nвнедрении structlog в приложение, где часть логов уже пишется при помощи библиотеки logging.\n\nP.S. Иными словами, данный процессор служит заменой для structlog.dev.ConsoleRenderer или \nstructlog.processors.JSONRenderer и позволяет сказать библиотеке structlog, что данные, которые необходимо \nзалогировать сформированы и можно передать их дальше.\n\nДанный процессор должен быть ВСЕГДА ПОСЛЕДНИМ в списке процессоров.\n\n\n`labelgun.integrations.structlog_utils.convert_event_dict_to_str_processor`\n\nВыполняет конвертацию \"примитивных\" типов в строки. Под примитивами понимаются числа, uuid, различные обертки\nпозволяющие выполнять точные расчеты (например Decimal) и т.д.\n\nПомогает избежать проблемы, если логи вашего приложения загружаются в elasticsearch для анализа.\n    \nПример решаемой проблемы:\n\nЛоги с нескольких сервисов собираются в одном индексе elasticsearch и каждый из этих сервисов в логах использует\nпеременную с одинаковым именем, но содержание у них разное. На пример в одном сервисе логируется user_id=1, а в \nдругом user_id='4v43gbv33'. В этом случае в elasticsearch попадут логи только того сервиса, сообщение от которого \nбудет обработано раньше. Это происходит потому, что индекс в elasticsearch типизирован и одно поле не может хранить \nданные различных типов.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusetech%2Flabelgun","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fusetech%2Flabelgun","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusetech%2Flabelgun/lists"}