{ "info": { "author": "Sam Clements", "author_email": "sam@borntyping.co.uk", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7" ], "description": "jsonlog\n=======\n\nA drop-in formatter for Python's `logging` module that outputs messages as line\ndelimited JSON.\n\nWhile `jsonlog` provides it's own `basicConfig` method so you can get started\nquickly, all of it's features and classes can be used with the `logging` module.\n\nUsage\n-----\n\nYou can use `jsonlog` as a drop-in replacement for `logging`:\n\n```python\nimport jsonlog\n\njsonlog.warning(\"Hello world.\")\n```\n\n```json\n{\"timestamp\": \"2019-06-21T19:06:25.285730\", \"level\": \"WARNING\", \"name\": \"root\", \"message\": \"Hello world.\"}\n```\n\nIt's implemented as a log formatter, so you can use `logging` just like you\nnormally would.\n\n```python\nimport jsonlog\nimport logging\n\njsonlog.basicConfig(level=jsonlog.INFO)\njsonlog.warning(\"Works with functions in the jsonlog module.\")\nlogging.warning(\"And works with functions in the logging module.\")\n```\n\n### Configuration using `jsonlog.basicConfig`\n\nThe `jsonlog.basicConfig` function accepts slightly different parameters to\n`logging.basicConfig`. It's shown here with the defaults for each parameter.\n\nThe `filename`, `filemode` and `stream` parameters work the same way as their\nequivalents in `logging.basicConfig`, and as such `filename` and `stream` are\nexclusive. \n\n```python\nimport jsonlog\n\njsonlog.basicConfig(\n level=jsonlog.INFO,\n indent=None,\n keys=(\"timestamp\", \"level\", \"message\"),\n timespec=\"auto\",\n # filename=None,\n # filemode=\"a\",\n # stream=None,\n)\n```\n\n### Configuration using `logging.config.dictConfig`\n\nAny of the configuration methods in `logging.config` can be used to configure a\nhandler that uses `jsonlog.formmatters.JSONFormatter` to format records as JSON. \n\n```python\nimport logging.config\n\nlogging.config.dictConfig(\n {\n \"version\": 1,\n \"formatters\": {\"json\": {\"()\": \"jsonlog.JSONFormatter\"}},\n \"handlers\": {\"stream\": {\"class\": \"logging.StreamHandler\", \"formatter\": \"json\"}},\n \"loggers\": {\"\": {\"handlers\": [\"stream\"]}},\n }\n)\n```\n\n### Adding extra attributes to JSON output\n\nRecord attributes provided with `extra=` will be included in the JSON object.\n\n```python\nimport jsonlog\nimport logging\n\njsonlog.basicConfig()\nlogging.warning(\"User clicked a button\", extra={\"user\": 123})\n```\n\n```json\n{\"timestamp\": \"2019-06-21T19:06:54.293929\", \"level\": \"WARNING\", \"name\": \"root\", \"message\": \"User clicked a button\", \"user\": 123}\n```\n\nIf a mapping is passed as the only positional argument, attributes from the\nmapping will also be included.\n\n```python\nimport jsonlog\nimport logging\n\njsonlog.basicConfig()\nlogging.warning(\"User clicked a button\", {\"user\": 123})\n```\n\n### Pipelining\n\nTry piping logs through [jq] if you want to read them on the command line!\n\n```bash\npython examples/hello.py 2> >(jq .)\n```\n\n```json\n{\n \"timestamp\": \"2019-06-21T19:07:43.211782\",\n \"level\": \"WARNING\",\n \"name\": \"root\",\n \"message\": \"Hello world.\"\n}\n\n```\n\n### Tracebacks\n\nTracebacks are included as a single string - it's not very nice to read, but\nmeans it'll play nicely with any systems that read the JSON logs you output.\n\n```json\n{\"timestamp\": \"2019-06-21T19:08:37.326897\", \"level\": \"ERROR\", \"name\": \"root\", \"message\": \"Encountered an error\", \"traceback\": \"Traceback (most recent call last):\\n File \\\"examples/error.py\\\", line 6, in \\n raise ValueError(\\\"Example exception\\\")\\nValueError: Example exception\"}\n```\n\nTools like [jq] make it easy to extract and read the traceback:\n\n```bash\npython examples/error.py 2> >(jq -r \".traceback\")\n```\n\n```\nTraceback (most recent call last):\n File \"examples/error.py\", line 6, in \n raise ValueError(\"Example exception\")\nValueError: Example exception\n``` \n\nCompatibility\n-------------\n\n`jsonlog` is written for Python 3.7 and above. Compatibility patches will be\naccepted for Python 3.5 and above, but patches for Python 2 will be rejected.\n\nReferences\n----------\n\n* Build for use with the [logging] module.\n* Partially based on [colorlog].\n* Works great with [jq]!\n\nAuthors\n-------\n\n* [Sam Clements]\n\n[colorlog]: https://gitlab.com/borntyping/colorlog\n[jq]: https://stedolan.github.io/jq/\n[logging]: https://docs.python.org/3/library/logging.html\n[Sam Clements]: https://gitlab.com/borntyping\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/borntyping/jsonlog", "keywords": "json,logging", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "jsonlog", "package_url": "https://pypi.org/project/jsonlog/", "platform": "any", "project_url": "https://pypi.org/project/jsonlog/", "project_urls": { "Homepage": "https://github.com/borntyping/jsonlog" }, "release_url": "https://pypi.org/project/jsonlog/2.0.0/", "requires_dist": null, "requires_python": "", "summary": "JSON log formatting for the Python logging module.", "version": "2.0.0" }, "last_serial": 5451757, "releases": { "0.0.0": [ { "comment_text": "", "digests": { "md5": "edc165f3f97c96ace33a0d85846dde87", "sha256": "95ccbea9e357523963beb571d2ef7d0c52170aa39fe8cf118031a15707a1912f" }, "downloads": -1, "filename": "jsonlog-0.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "edc165f3f97c96ace33a0d85846dde87", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5306, "upload_time": "2019-06-21T12:31:41", "url": "https://files.pythonhosted.org/packages/25/b9/ca564046f331005f8a810c8dcd9714b5d68748f3b7e9a869658f5d57ec64/jsonlog-0.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b7e48ce62c406b18765545fb65387346", "sha256": "d843b56369e199cd2a4648ff48bfb452fb13fe1f44ba190fa64b84fb7391486e" }, "downloads": -1, "filename": "jsonlog-0.0.0.tar.gz", "has_sig": false, "md5_digest": "b7e48ce62c406b18765545fb65387346", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4051, "upload_time": "2019-06-21T12:31:43", "url": "https://files.pythonhosted.org/packages/5a/3e/08282e1dd95fa549d755b7ca29f8a7f5a90907ac647613cf027fee954ef5/jsonlog-0.0.0.tar.gz" } ], "0.0.1": [ { "comment_text": "", "digests": { "md5": "622ca6e0e6424422f96d181727dfcf5c", "sha256": "504ec937250b04d107be2253c09c6da26cd6e3477b6fe00837cd7f16321e23bc" }, "downloads": -1, "filename": "jsonlog-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "622ca6e0e6424422f96d181727dfcf5c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5319, "upload_time": "2019-06-21T12:32:18", "url": "https://files.pythonhosted.org/packages/fc/8a/127f96be96c1cb4ec0b3bc390cebf33c8524726f550e195cae9e5da0dfba/jsonlog-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "33496a9093266ee50de4c3f428c325bd", "sha256": "429e70fae894b948fde83c449e027549c13c20b47cd5f611083ddd3efc538930" }, "downloads": -1, "filename": "jsonlog-0.0.1.tar.gz", "has_sig": false, "md5_digest": "33496a9093266ee50de4c3f428c325bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4046, "upload_time": "2019-06-21T12:32:19", "url": "https://files.pythonhosted.org/packages/6b/fe/2261723777e57b8bd44d664fd5e34c56b43c9825a871664ee7938768c4d5/jsonlog-0.0.1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "f626305e44b1a08f1e59b1b8e6b067f0", "sha256": "396fc102b1915b2ea88606e34b5a8470bf38af7f98fc478540f900a839804920" }, "downloads": -1, "filename": "jsonlog-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f626305e44b1a08f1e59b1b8e6b067f0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9372, "upload_time": "2019-06-21T16:51:32", "url": "https://files.pythonhosted.org/packages/5d/4c/5b8c9567793c7e686aebbe2143b7815e7733c1d5cf38ae25f816df4e24fb/jsonlog-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9516e3cad1fe34f23fa89d589117e284", "sha256": "fcfb7517a9f891fa7d71a94edf676aeac2682c3e4c3abb9f3ad978ad7987a1b8" }, "downloads": -1, "filename": "jsonlog-1.0.0.tar.gz", "has_sig": false, "md5_digest": "9516e3cad1fe34f23fa89d589117e284", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7224, "upload_time": "2019-06-21T16:51:33", "url": "https://files.pythonhosted.org/packages/b2/a5/8f66095a08211691f07d2f02b63cba75caf553fc7b436c791a3d0796fbc0/jsonlog-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "0126bcfe52a725da6079c57d8efb0f4e", "sha256": "9543138dbe857880816a26619316a556e8358d70ac74a6277b4d5af47c35e899" }, "downloads": -1, "filename": "jsonlog-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0126bcfe52a725da6079c57d8efb0f4e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10834, "upload_time": "2019-06-21T18:13:44", "url": "https://files.pythonhosted.org/packages/ab/7b/800700dba197aa676c8017322a6caa60a46f5f901f11b407cef2b0819e6c/jsonlog-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b8ba9db0d367dd76210b9a0a5a6f4c11", "sha256": "3e9010ca4be84f804dbc564f81deb160a13de44472f5a785fdd00a8e72df56c2" }, "downloads": -1, "filename": "jsonlog-1.1.0.tar.gz", "has_sig": false, "md5_digest": "b8ba9db0d367dd76210b9a0a5a6f4c11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9204, "upload_time": "2019-06-21T18:13:45", "url": "https://files.pythonhosted.org/packages/68/f1/d8a24f5d01497926ce18c7104eccd0aea094cb355a5e1092daeb7297f4d8/jsonlog-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "7f477370e35fdbb9335cf850ecdb7f6c", "sha256": "c05eae5956682ac862f96113b0f3a6f9fb8bae531f74764832ed4841c94616bb" }, "downloads": -1, "filename": "jsonlog-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7f477370e35fdbb9335cf850ecdb7f6c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10841, "upload_time": "2019-06-25T14:24:15", "url": "https://files.pythonhosted.org/packages/b8/48/65b8d6acfe376d9ba194b41e3957d685f08ff9236b3799f55a044ad5d7a2/jsonlog-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f82f5acf17657319590b68f805df65b4", "sha256": "8f5a2cc214efc64c001216699a214a01a677c957209f14f06f61ddc5e835fe16" }, "downloads": -1, "filename": "jsonlog-1.2.0.tar.gz", "has_sig": false, "md5_digest": "f82f5acf17657319590b68f805df65b4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9151, "upload_time": "2019-06-25T14:24:17", "url": "https://files.pythonhosted.org/packages/f8/9b/7fbea6bb969fa14f0e63776ab7808bfb285cf6c099c3add32c6e89895bc0/jsonlog-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "0cb4486b4bc932010c05d3305c64ff65", "sha256": "0be8c5a8d167e35b981b5baf505ccbceadff17aee5572e360cb87ac88f0f6e4e" }, "downloads": -1, "filename": "jsonlog-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0cb4486b4bc932010c05d3305c64ff65", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10941, "upload_time": "2019-06-26T13:07:27", "url": "https://files.pythonhosted.org/packages/c4/04/422f8069191ae9a61277ef0844575ced4bc3a6894a41bde4250b029399f4/jsonlog-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "416f045c38dda9588323173492ee7adf", "sha256": "27e7125b9235179d6197e718c51888dfaad067e971121e321434b3a50335bb75" }, "downloads": -1, "filename": "jsonlog-1.3.0.tar.gz", "has_sig": false, "md5_digest": "416f045c38dda9588323173492ee7adf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9272, "upload_time": "2019-06-26T13:07:28", "url": "https://files.pythonhosted.org/packages/f0/27/e425cee9479c73deba60658c6ca71c9b70b98792e546595c8782bbcbd964/jsonlog-1.3.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "1a7fbf0dbb43de991e5dc927c04b937b", "sha256": "fbc92058553e7e3db007c3891ebdc969575f404a29e08ac86f794ad99606467a" }, "downloads": -1, "filename": "jsonlog-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1a7fbf0dbb43de991e5dc927c04b937b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10889, "upload_time": "2019-06-26T13:39:51", "url": "https://files.pythonhosted.org/packages/90/21/020e9f82c1be362ae47e7de4551b89cb647f2f1d26879d6d41e303dbd798/jsonlog-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "78120d1e2e2b4318d727325bb7cac8d1", "sha256": "2f949de4ded2395e216274132622a90838685b2739b7101cfb84d6f097353219" }, "downloads": -1, "filename": "jsonlog-2.0.0.tar.gz", "has_sig": false, "md5_digest": "78120d1e2e2b4318d727325bb7cac8d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9220, "upload_time": "2019-06-26T13:39:53", "url": "https://files.pythonhosted.org/packages/48/9f/8399abf2f1ca7fc8ba7d215fb01efb986a9de464b7bac0bff9ca84c013df/jsonlog-2.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1a7fbf0dbb43de991e5dc927c04b937b", "sha256": "fbc92058553e7e3db007c3891ebdc969575f404a29e08ac86f794ad99606467a" }, "downloads": -1, "filename": "jsonlog-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1a7fbf0dbb43de991e5dc927c04b937b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10889, "upload_time": "2019-06-26T13:39:51", "url": "https://files.pythonhosted.org/packages/90/21/020e9f82c1be362ae47e7de4551b89cb647f2f1d26879d6d41e303dbd798/jsonlog-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "78120d1e2e2b4318d727325bb7cac8d1", "sha256": "2f949de4ded2395e216274132622a90838685b2739b7101cfb84d6f097353219" }, "downloads": -1, "filename": "jsonlog-2.0.0.tar.gz", "has_sig": false, "md5_digest": "78120d1e2e2b4318d727325bb7cac8d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9220, "upload_time": "2019-06-26T13:39:53", "url": "https://files.pythonhosted.org/packages/48/9f/8399abf2f1ca7fc8ba7d215fb01efb986a9de464b7bac0bff9ca84c013df/jsonlog-2.0.0.tar.gz" } ] }