Skip to main content

tstringlogger

Adds support for using t-strings in log messages while preserving all interpolated values.

Usage example:

>>> import logging
>>> from tstringlogger import TStringLogRecord
>>> test1, test2 = "hello", "world"
>>>
>>> # Set the default log record factory to one that supports t-strings
>>> logging.setLogRecordFactory(TStringLogRecord)
>>>
>>> logging.info(t"{test1=}, {test2}")
INFO:root:test1='hello', world
>>>
>>> # Standard logging still works normally
>>> logging.info("test1=%r, %s", test1, test2)
INFO:root:test1='hello', world

In this example the log record that was produced by the t-string message will have the data from the t-string available as record.args. In this case that would be: {"test1": "hello", "test2": "world"}.

Extracting these values from the t-string allows other parts of the logging system to use the values just as if they were provided as parameters to a normal logging call.

[!NOTE] The request to add native t-string logging support to the standard library can be found here: https://github.com/python/cpython/issues/134394

Alternative methods

Using the TStringLogRecordMixin

If your application already uses a custom LogRecord class, the TStringLogRecordMixin can be used to easily add t-string functionality to it.

>>> import logging
>>> from tstringlogger import TStringLogRecordMixin
>>>
>>> # example custom logger that adds a tag to every message
>>> class MyCustomLogRecord(TStringLogRecordMixin, logging.LogRecord):
...     def getMessage(self):
...         msg = super().getMessage()  # get the formatting t-string
...         return f"[tag] {msg}"
>>>
>>> logging.setLogRecordFactory(MyCustomLogRecord)
>>> test1, test2 = "hello", "world"
>>> logging.info(t"{test1=}, {test2}")
INFO:root:[tag] test1='hello', world

Globally enable t-string support

Support for t-string logging can be globally enabled/disabled by calling tstringlogger.enable()/tstringlogger.disable(). This adds support for t-strings by directly patching the LogRecord.__init__ and LogRecord.getMessage functions.

>>> import logging
>>> import tstringlogger
>>>
>>> tstringlogger.enable()  # apply patches
>>>
>>> test1, test2 = "hello", "world"
>>> logging.info(t"{test1=}, {test2}")
INFO:root:test1='hello', world
>>>
>>> tstringlogger.disable()  # remove patches
>>> logging.info(t"{test1=}, {test2}")
INFO:root:Template(strings=('test1=', ', ', ''), interpolations=(Interpolation...

Related work

bracelogger is a library that allows using new-style string formatting in log messages instead of %-based formatting.

Release files for tstringlogger 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tstringlogger 1.1.0
File Size Uploaded
tstringlogger-1.1.0.tar.gz 3.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tstringlogger 1.1.0
File Interpreter ABI Platform
tstringlogger-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 6.9 kB

Release files / tstringlogger-1.1.0.tar.gz

Download URL tstringlogger-1.1.0.tar.gz
Size 3.8 kB
Tags Source
SHA-256 checksum
How to use checksums
4c4cb8d138de50efc413af1b61431b701d50e9315e4476f1f0a76c2f262d92b6
BLAKE2b-256 checksum
How to use checksums
be7dede8707155285c2ff6fa33d4c330a6ed45528ab074d7a8eaddf4487e61ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release files / tstringlogger-1.1.0-py3-none-any.whl

Download URL tstringlogger-1.1.0-py3-none-any.whl
Size 3.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e264c80c84970a58fc96543c2122cf34b3610b0dc25d536478e8d49050edd342
BLAKE2b-256 checksum
How to use checksums
9bd3efdd461403ea700256e1dd9f579d451448e3f0b2448af9a0062b914df878
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page