Formatting exception handling and fill_missing_fmt_key error

Open
#189 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
45/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
python
Domain
backend

Research direction

Start at fluent/handler.py around the linked line 151 and reproduce the Python 3.8+ formatting traceback. Trace how ValueError is handled for each style and how FluentRecordFormatter's fill_missing_fmt_key=True path responds; done means both formatting error handling and missing-key filling behave as intended.

Written by the indexing model from the issue text.

Description

There is ValueError is reraised instead of KeyError in the format method of each style class since python3.8:
https://github.com/python/cpython/issues/79025#issuecomment-1093800953

So formatting error handling and fill_missing_fmt_key=True arg of FluentRecordFormatter does not work correctly.

Traceback (most recent call last):
  File "/usr/lib/python3.10/logging/__init__.py", line 440, in format
    return self._format(record)
  File "/usr/lib/python3.10/logging/__init__.py", line 458, in _format
    return self._fmt.format(**values)
KeyError: 'kubernetes'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/nz/.local/lib/virtualenvs/platform10/lib/python3.10/site-packages/django/core/management/base.py", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/nz/.local/lib/virtualenvs/platform10/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 61, in execute
    super().execute(*args, **options)
  File "/home/nz/.local/lib/virtualenvs/platform10/lib/python3.10/site-packages/django/core/management/base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "/home/nz/.local/lib/virtualenvs/platform10/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 96, in handle
    self.run(**options)
  File "/home/nz/.local/lib/virtualenvs/platform10/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 103, in run
    autoreload.run_with_reloader(self.inner_run, **options)
  File "/home/nz/.local/lib/virtualenvs/platform10/lib/python3.10/site-packages/django/utils/autoreload.py", line 617, in run_with_reloader
    logger.info('Watching for file changes with %s', reloader.__class__.__name__)
  File "/usr/lib/python3.10/logging/__init__.py", line 1477, in info
    self._log(INFO, msg, args, **kwargs)
  File "/usr/lib/python3.10/logging/__init__.py", line 1624, in _log
    self.handle(record)
  File "/usr/lib/python3.10/logging/__init__.py", line 1634, in handle
    self.callHandlers(record)
  File "/usr/lib/python3.10/logging/__init__.py", line 1696, in callHandlers
    hdlr.handle(record)
  File "/usr/lib/python3.10/logging/__init__.py", line 968, in handle
    self.emit(record)
  File "/home/nz/.local/lib/virtualenvs/platform10/lib/python3.10/site-packages/fluent/handler.py", line 232, in emit
    data = self.format(record)
  File "/usr/lib/python3.10/logging/__init__.py", line 943, in format
    return fmt.format(record)
  File "/home/nz/.local/lib/virtualenvs/platform10/lib/python3.10/site-packages/fluent/handler.py", line 97, in format
    data = self._formatter(record)
  File "/home/nz/.local/lib/virtualenvs/platform10/lib/python3.10/site-packages/fluent/handler.py", line 154, in _format_by_dict
    raise exc
  File "/home/nz/.local/lib/virtualenvs/platform10/lib/python3.10/site-packages/fluent/handler.py", line 148, in _format_by_dict
    value = self.__style(value).format(record)
  File "/usr/lib/python3.10/logging/__init__.py", line 442, in format
    raise ValueError('Formatting field not found in record: %s' % e)
ValueError: Formatting field not found in record: 'kubernetes'

ValueError must be handled here

Dominant language
Python
Stars
457
Forks
138
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from fluent/fluent-logger-python

All issues in fluent/fluent-logger-python

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.