Title: MemoryHandler can't be setup through a DictConfig if any other logger is setup after it · Issue #123239 · python/cpython · GitHub
Open Graph Title: MemoryHandler can't be setup through a DictConfig if any other logger is setup after it · Issue #123239 · python/cpython
X Title: MemoryHandler can't be setup through a DictConfig if any other logger is setup after it · Issue #123239 · python/cpython
Description: Bug report Bug description: This is the logging that's failing. LOGGING = { "version": 1, "disable_existing_loggers": False, "handlers": { "fine-logger1": { 'level': logging.INFO, 'formatter': 'verbose-console', 'class': 'logging.StreamH...
Open Graph Description: Bug report Bug description: This is the logging that's failing. LOGGING = { "version": 1, "disable_existing_loggers": False, "handlers": { "fine-logger1": { 'level': logging.INFO, 'formatter': 'ver...
X Description: Bug report Bug description: This is the logging that's failing. LOGGING = { "version": 1, "disable_existing_loggers": False, "handlers": { "fine-logger1"...
Opengraph URL: https://github.com/python/cpython/issues/123239
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"MemoryHandler can't be setup through a DictConfig if any other logger is setup after it","articleBody":"# Bug report\r\n\r\n### Bug description:\r\n\r\nThis is the logging that's failing.\r\n```python\r\nLOGGING = {\r\n \"version\": 1,\r\n \"disable_existing_loggers\": False,\r\n \"handlers\": {\r\n \"fine-logger1\": {\r\n 'level': logging.INFO,\r\n 'formatter': 'verbose-console',\r\n 'class': 'logging.StreamHandler',\r\n 'stream': 'ext://sys.stdout',\r\n },\r\n \"fine-logger2\": {\r\n \"level\": logging.INFO,\r\n \"class\": \"logging.FileHandler\",\r\n \"filename\": Path(\"logs/somefilename.log\"),\r\n \"mode\": \"a\",\r\n \"formatter\": \"verbose\",\r\n },\r\n \"fine-logger3\": {\r\n \"level\": logging.DEBUG,\r\n \"class\": \"logging.FileHandler\",\r\n \"filename\": Path(\"logs/errors/somefilename.log\"),\r\n \"delay\": True,\r\n \"formatter\": \"verbose\",\r\n },\r\n \"bugged-logger3\": {\r\n \"level\": logging.DEBUG,\r\n \"class\": \"logging.handlers.MemoryHandler\",\r\n \"capacity\": 9999999,\r\n \"flushLevel\": logging.ERROR,\r\n \"target\": \"fine-logger3\",\r\n \"flushOnClose\": False,\r\n },\r\n },\r\n \"loggers\": {\r\n \"bug-logger\": {\r\n \"handlers\": [\"fine-logger1\", \"fine-logger2\", \"bugged-logger3\"],\r\n \"level\": logging.DEBUG,\r\n \"propagate\": True\r\n },\r\n },\r\n}\r\n```\r\nAfter it's been setup, if any other handler is setup afterwards (in my case it's the [copernicusmarine](https://pypi.org/project/copernicusmarine/) logger) the handler `bugged-logger3` will have a `None` inside its `target` field, as every handler that's not `incremental` will delete existing unused handlers.\r\n\r\nI've dug into the source code of logging and I think I've tracked down where this is happpening, but I'm not really sure on how to fix it.\r\nIn the config file `python3.11/logging/config.py` in the `configure()` function there's a call to `_clearExistingHandlers()`:\r\n```\r\n else:\r\n disable_existing = config.pop('disable_existing_loggers', True)\r\n\r\n _clearExistingHandlers() \u003c-----\r\n\r\n # Do formatters first - they don't refer to anything else\r\n formatters = config.get('formatters', EMPTY_DICT)\r\n for name in formatters:\r\n try:\r\n formatters[name] = self.configure_formatter(\r\n formatters[name])\r\n```\r\nIf we comment this line, it works completely fine. But I guess this just keeps handlers loaded in memory and that's not a proper solution.\r\n\r\n\r\n### CPython versions tested on:\r\n\r\n3.11\r\n\r\n### Operating systems tested on:\r\n\r\nLinux","author":{"url":"https://github.com/TheSylex","@type":"Person","name":"TheSylex"},"datePublished":"2024-08-22T17:02:49.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":3},"url":"https://github.com/123239/cpython/issues/123239"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:2e7524be-9319-c3f0-8b7b-30959eec6bb9 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | BAF6:3AC180:3F9B2A:5A74DC:6A59DB54 |
| html-safe-nonce | 6d26f4333f95075f7f6ec3b5504dbc7d84038cb0cbf72ae1be38f1c707150853 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCQUY2OjNBQzE4MDozRjlCMkE6NUE3NERDOjZBNTlEQjU0IiwidmlzaXRvcl9pZCI6IjY0NzgwNjUwODUxODU2NDUzOTYiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 24e7bd8d0e35ed167d1d5d51bb1438c81c137e95c736b681e7d6001cf678855c |
| hovercard-subject-tag | issue:2481314641 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/123239/issue_layout |
| twitter:image | https://opengraph.githubassets.com/12979b10000fa48106b85363aa94491a4fe3c1c0c8547e058c2434d0c7e7bf40/python/cpython/issues/123239 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/12979b10000fa48106b85363aa94491a4fe3c1c0c8547e058c2434d0c7e7bf40/python/cpython/issues/123239 |
| og:image:alt | Bug report Bug description: This is the logging that's failing. LOGGING = { "version": 1, "disable_existing_loggers": False, "handlers": { "fine-logger1": { 'level': logging.INFO, 'formatter': 'ver... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | TheSylex |
| hostname | github.com |
| expected-hostname | github.com |
| None | ba3976babb66479b1c943a8edc0777d96157da48fadc0161f9ddb219deee8353 |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | bfacf98c3b7ad151665d6ddd216469389872b251 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width