Логгер: вызывать setup_logger при импорте приложения (#18) #20
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/18-logger-diagnose"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #18
Что было
src/core/logger.pyсодержалsetup_logger()сdiagnose=False, но приложение его не вызывало. Работал обработчик loguru по умолчанию (stderr,diagnose=True), и трейсбек любого залогированного исключения (logger.exception,opt(exception=...)) содержал значения локальных переменных во всех фреймах, в том числе содержимое запросов и секреты из настроек.Что сделано
src/app.pyвызываетsetup_logger(level="DEBUG" if settings.DEBUG else "INFO")при импорте модуля, так же как tabular-parser.test_app_import_logs_exceptions_without_local_values: в отдельном процессе импортируетsrc.app, логирует исключение, у которого в строке raise есть локальная переменная, и проверяет, что трейсбек есть, а значения переменной нет. До исправления тест падал (└ 'local-secret-value'в выводе).Побочные эффекты (поведение как в tabular-parser):
время | уровень | req=… | модуль:функция:строка - сообщение;uvicorn.run()после импорта приложения применяет свойdictConfigи снова включаетuvicorn.access(проверено на работающем контейнере tabular-parser: строки"GET /healthcheck HTTP/1.1" 200есть).Проверки
make checkзелёный: ruff, mypy, unit 993 passed / 35 skipped.make docker-buildпрошёл.make test-integration: 2 failed (test_nats_minio_integration.py:test_subscribe_and_publish_with_msg_id_without_jetstream,test_queue_group_delivers_each_message_to_exactly_one_member). На кодеmainпадают так же (22/40 и 0/1): на общем NATS работает контейнер стендаarm-ka-scan-gateway-1, он стоит в той же queue group и забирает сообщения теста. Изменение тут ни при чём, см. O-3.Rulings I made
setup_loggerвызывается на уровне модуляsrc/app.py, а не внутриcreate_app().create_appтесты вызывают многократно, и каждый вызов сбрасывал бы их собственные обработчики loguru; плюс так же сделано в tabular-parser. Цена ошибки: низкая, вызов переносится одной строкой.python -c) loguru не аннотирует строки трейсбека, и тест проходил бы даже сdiagnose=True. Это проверено: первая версия на-cбыла зелёной до исправления. Цена ошибки: низкая.Находки
logger.py(во всех трёх сервисах) docstringis_noise_pathссылается наRequestLoggingMiddleware, которой нет ни в одн��м репозитории;extra[request_id]в формате никто не связывает (всегдаreq=-). Остаток шаблона: либо реализовать middleware, либо убрать ссылку и полеsetup_loggerуже вызывается, но регрессионного теста на отсутствие локальных переменных в логе нетarm-ka-scan-gateway-1) и при поднятом стенде теряют сообщения. Нужны уникальные subject/группа на прогон или явное требование остановить сервис стендаlog_linesвtests/conftest.pyпосле теста возвращаетlogger.add(sys.stderr)сdiagnose=True, поэтому в выводе pytest видны локальные переменные. Касается только тестов, в прод не попадает🤖 Generated with Claude Code
https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2