Conversation
Each construction attached a new SysLogHandler to the root logger and changed its level; records then also hit the LoggingHandler bridge on root and looped back into Logger. Use a dedicated non-propagating logger per address with one reused handler, and add close(). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Root cause
LogSyslogDriver.__init__usedlogging.getLogger("root")(the actual root logger), added a freshSysLogHandleron every construction and mutated the root level. Handlers piled up, and since theLoggingHandlerbridge also sits on root, syslog-driver records were fed back intoLogger(possible loop).Fix
Mirrors the PR #257 pattern (independent of it, branched off main):
fastapi_startkit.logging.syslog.<address>withpropagate = FalseSysLogHandlerper address, reused across constructionsclose()to detach and close the handlerTests
New
tests/logging/test_syslog_driver.py(SysLogHandler mocked, no real socket):SysLogHandlerbuilt once)LoggingHandlerbridgeclose()detaches and closes the handlerThese fail on current main and pass with the fix. Full suite: 2487 passed; LogSyslogDriver.py 100% coverage; ruff clean; basedpyright 0.
🤖 Generated with Claude Code