<a href="https://github.com/sondrelg/printf-log-formatter"><img src="https://raw.githubusercontent.com/sondrelg/printf-log-formatter/main/logo.svg?token=GHSAT0AAAAAACAOR4AAQVLI3YMI4IZKDAYCZBS5KOA&sanitize=true" alt="logo" width="110" align="right"></a>
# printf-log-formatter
Automatically convert f-strings and `str.format()` syntax to printf-style strings.
In other words, this syntax
```python
logger.error(f"{1}")
logger.error("{}".format(1))
logger.error("{foo}".format(foo=1))
```
is changed to
```python
logger.error("%s", 1)
logger.error("%s", 1)
logger.error("%s", 1)
```
## Motivation
Why would we want to do this? [This article](https://blog.pilosus.org/posts/2020/01/24/python-f-strings-in-logging/) explains it pretty well.
Mainly it's useful for Python projects using [Sentry](https://sentry.io)'s log integration.
## Installation
You have two options for running this pre-commit hook:
### Python hook
If you would like to install this using Python, run:
```shell
pip install printf-log-formatter
```
then set the pre-commit hook up using:
```yaml
- repo: local
hooks:
- id: printf-log-formatter
name: printf-log-formatter
entry: printf-log-formatter
language: system
types: [ python ]
args:
- --log-level=error
```
### Rust hook
If you're happy to compile the Rust version, you can use:
```yaml
- repo: https://github.com/sondrelg/printf-log-formatter
rev: ''
hooks:
- id: printf-log-formatter
args:
- --log-level=error
```
## I just want to downgrade loggers once
The Rust binary or Python package can also be run directly, like this:
```shell
printf-log-formatter $(find . -name "*.py") --log-level error
```
Raw data
{
"_id": null,
"home_page": null,
"name": "printf-log-formatter",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "linter,formatter,logging,sentry",
"author": "Sondre Lilleb\u00f8 Gundersen <sondrelg@live.no>",
"author_email": "Sondre Lilleb\u00f8 Gundersen <sondrelg@live.no>",
"download_url": null,
"platform": null,
"description": "<a href=\"https://github.com/sondrelg/printf-log-formatter\"><img src=\"https://raw.githubusercontent.com/sondrelg/printf-log-formatter/main/logo.svg?token=GHSAT0AAAAAACAOR4AAQVLI3YMI4IZKDAYCZBS5KOA&sanitize=true\" alt=\"logo\" width=\"110\" align=\"right\"></a>\n\n# printf-log-formatter\n\nAutomatically convert f-strings and `str.format()` syntax to printf-style strings.\n\nIn other words, this syntax\n\n```python\nlogger.error(f\"{1}\")\nlogger.error(\"{}\".format(1))\nlogger.error(\"{foo}\".format(foo=1))\n```\n\nis changed to\n\n```python\nlogger.error(\"%s\", 1)\nlogger.error(\"%s\", 1)\nlogger.error(\"%s\", 1)\n```\n\n\n## Motivation\n\nWhy would we want to do this? [This article](https://blog.pilosus.org/posts/2020/01/24/python-f-strings-in-logging/) explains it pretty well.\n\nMainly it's useful for Python projects using [Sentry](https://sentry.io)'s log integration.\n\n## Installation\n\nYou have two options for running this pre-commit hook:\n\n\n### Python hook\n\nIf you would like to install this using Python, run:\n\n```shell\npip install printf-log-formatter\n```\n\nthen set the pre-commit hook up using:\n\n```yaml\n- repo: local\n hooks:\n - id: printf-log-formatter\n name: printf-log-formatter\n entry: printf-log-formatter\n language: system\n types: [ python ]\n args:\n - --log-level=error\n```\n\n\n### Rust hook\n\nIf you're happy to compile the Rust version, you can use:\n\n```yaml\n- repo: https://github.com/sondrelg/printf-log-formatter\n rev: ''\n hooks:\n - id: printf-log-formatter\n args:\n - --log-level=error\n```\n\n## I just want to downgrade loggers once\n\nThe Rust binary or Python package can also be run directly, like this:\n\n```shell\nprintf-log-formatter $(find . -name \"*.py\") --log-level error\n```\n\n",
"bugtrack_url": null,
"license": null,
"summary": "Convert logger f-strings and str.format syntax to printf-style strings",
"version": "0.3.0",
"split_keywords": [
"linter",
"formatter",
"logging",
"sentry"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e7c989e0cf694ced1721b81a50f7b9265fa7da3ce369833e4065cd2b75bbf22f",
"md5": "d7a73d04030473d37fa2db8f939de306",
"sha256": "a41bfba0d49dc16675ac9c180c3380903622a4f48d6a537c72394054ed513a35"
},
"downloads": -1,
"filename": "printf_log_formatter-0.3.0-py3-none-macosx_10_7_x86_64.whl",
"has_sig": false,
"md5_digest": "d7a73d04030473d37fa2db8f939de306",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 1715476,
"upload_time": "2023-04-23T20:11:40",
"upload_time_iso_8601": "2023-04-23T20:11:40.536260Z",
"url": "https://files.pythonhosted.org/packages/e7/c9/89e0cf694ced1721b81a50f7b9265fa7da3ce369833e4065cd2b75bbf22f/printf_log_formatter-0.3.0-py3-none-macosx_10_7_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a6a76e4449dffad3d095678c9badf1c487d1bc0ea7bba15ea6058f25f7c550a6",
"md5": "a89655d4623d1eba9b169e5a828a32cf",
"sha256": "c6bb875f2e7ede7467ee59a8f73125cb6361d9b599b8bcf8f9e1f2ca487519ae"
},
"downloads": -1,
"filename": "printf_log_formatter-0.3.0-py3-none-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "a89655d4623d1eba9b169e5a828a32cf",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 1646154,
"upload_time": "2023-04-23T20:11:42",
"upload_time_iso_8601": "2023-04-23T20:11:42.110260Z",
"url": "https://files.pythonhosted.org/packages/a6/a7/6e4449dffad3d095678c9badf1c487d1bc0ea7bba15ea6058f25f7c550a6/printf_log_formatter-0.3.0-py3-none-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7d12acae1118f9481758d6981808b0183f92ac6228b63cee315eb6c99a390d3f",
"md5": "f31ec873549162db6e845ae13e210157",
"sha256": "300af2cdeafde7e4f0b631d41e82ceb7322a290b8e04c4e4bb35f8334ae9c7e5"
},
"downloads": -1,
"filename": "printf_log_formatter-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "f31ec873549162db6e845ae13e210157",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 2720656,
"upload_time": "2023-04-23T20:11:43",
"upload_time_iso_8601": "2023-04-23T20:11:43.672537Z",
"url": "https://files.pythonhosted.org/packages/7d/12/acae1118f9481758d6981808b0183f92ac6228b63cee315eb6c99a390d3f/printf_log_formatter-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d784ada8ce24e04ca4142c5ac4726d9ce284df4cf2ffdc505d6716b3ef950d6d",
"md5": "cf1159b88e70b658110307d34fb65d7f",
"sha256": "b51bfb73707f47b0dddc215a4660d088be918a250f5040683b724d2a2a9ad4d6"
},
"downloads": -1,
"filename": "printf_log_formatter-0.3.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "cf1159b88e70b658110307d34fb65d7f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 2679801,
"upload_time": "2023-04-23T20:11:46",
"upload_time_iso_8601": "2023-04-23T20:11:46.368743Z",
"url": "https://files.pythonhosted.org/packages/d7/84/ada8ce24e04ca4142c5ac4726d9ce284df4cf2ffdc505d6716b3ef950d6d/printf_log_formatter-0.3.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b2bc62e5b8e4a8e15b3fcc0a245346f090a0e0a855aaf191dc6c2a62106d1237",
"md5": "03572eca28f4799589b6a6dd2b0946f6",
"sha256": "b7099fa053a3eae2e9594f18712458b90d8008bc5f942f67bb18f9bc351001cd"
},
"downloads": -1,
"filename": "printf_log_formatter-0.3.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "03572eca28f4799589b6a6dd2b0946f6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 2866566,
"upload_time": "2023-04-23T20:11:49",
"upload_time_iso_8601": "2023-04-23T20:11:49.195021Z",
"url": "https://files.pythonhosted.org/packages/b2/bc/62e5b8e4a8e15b3fcc0a245346f090a0e0a855aaf191dc6c2a62106d1237/printf_log_formatter-0.3.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "88d544cfa70266d7ec5498976e9d9ec9765202cadbd1ff798b391bd1157975c4",
"md5": "7e7409b9f5ad403fdc6716cea4d1781f",
"sha256": "d17c0e555ed68249071675f8a86310b251fb84711a1928bfef5d0d14ece2f410"
},
"downloads": -1,
"filename": "printf_log_formatter-0.3.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "7e7409b9f5ad403fdc6716cea4d1781f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 2960161,
"upload_time": "2023-04-23T20:11:51",
"upload_time_iso_8601": "2023-04-23T20:11:51.011450Z",
"url": "https://files.pythonhosted.org/packages/88/d5/44cfa70266d7ec5498976e9d9ec9765202cadbd1ff798b391bd1157975c4/printf_log_formatter-0.3.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bf8e5bd8d4a1a5b209f4de07ad412a47bd7c2cd4fd70d3973657d9bcff6dec34",
"md5": "c4eb7a38ed8b400bce4a25b3eb9ebaf6",
"sha256": "af414b2e2d5b78504ace2d5b76b8aaae0afbc894314b56be170d8a052ba81388"
},
"downloads": -1,
"filename": "printf_log_formatter-0.3.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "c4eb7a38ed8b400bce4a25b3eb9ebaf6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 2866673,
"upload_time": "2023-04-23T20:11:53",
"upload_time_iso_8601": "2023-04-23T20:11:53.973273Z",
"url": "https://files.pythonhosted.org/packages/bf/8e/5bd8d4a1a5b209f4de07ad412a47bd7c2cd4fd70d3973657d9bcff6dec34/printf_log_formatter-0.3.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "96e15556a067332dbf256e31f93e9bf2c0cd85a3cff6ccf5b2c476bdb51a20df",
"md5": "778d858852b8f6e2b93f21098d52fb56",
"sha256": "97d675c90d84b87ecaa48d867b937876d46c66b0d480bf2bae373738fe8a3d17"
},
"downloads": -1,
"filename": "printf_log_formatter-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "778d858852b8f6e2b93f21098d52fb56",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 2720419,
"upload_time": "2023-04-23T20:11:55",
"upload_time_iso_8601": "2023-04-23T20:11:55.595887Z",
"url": "https://files.pythonhosted.org/packages/96/e1/5556a067332dbf256e31f93e9bf2c0cd85a3cff6ccf5b2c476bdb51a20df/printf_log_formatter-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ff7fde892947e6860caf2f9fb1185006722870ebddda2cfdefce4602cd9fa0e2",
"md5": "1f778c0d42f0d9c9b44c3dad129539b6",
"sha256": "d2fc29f8776121c1477100287c285d4798d310d0547f4573ad3eae23b66549cc"
},
"downloads": -1,
"filename": "printf_log_formatter-0.3.0-py3-none-win32.whl",
"has_sig": false,
"md5_digest": "1f778c0d42f0d9c9b44c3dad129539b6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 1454476,
"upload_time": "2023-04-23T20:11:57",
"upload_time_iso_8601": "2023-04-23T20:11:57.440575Z",
"url": "https://files.pythonhosted.org/packages/ff/7f/de892947e6860caf2f9fb1185006722870ebddda2cfdefce4602cd9fa0e2/printf_log_formatter-0.3.0-py3-none-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f35f22d83a59f2aa7201179d73eacc26ab10846d1e47933d75480e123b1bcf83",
"md5": "30c2cd274dd16e021c88230a767081a1",
"sha256": "27c3f053166bfe74e490661e8fe47167b12b8ca4d3066ba13f1ab53d1c7c6788"
},
"downloads": -1,
"filename": "printf_log_formatter-0.3.0-py3-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "30c2cd274dd16e021c88230a767081a1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 1585060,
"upload_time": "2023-04-23T20:11:59",
"upload_time_iso_8601": "2023-04-23T20:11:59.199754Z",
"url": "https://files.pythonhosted.org/packages/f3/5f/22d83a59f2aa7201179d73eacc26ab10846d1e47933d75480e123b1bcf83/printf_log_formatter-0.3.0-py3-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-04-23 20:11:40",
"github": false,
"gitlab": false,
"bitbucket": false,
"lcname": "printf-log-formatter"
}