Логгер: вызывать setup_logger при импорте приложения (#63) #65
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/63-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 #63
Что было
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-fullзелёный: unit 1262 passed; integration 825 passed; e2e 1 passed; dbml-check, docker-build и web-check прошли.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уже вызывается, но регрессионного теста на отсутствие локальных переменных в логе нет🤖 Generated with Claude Code
https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2