{ "info": { "author": "Terry Cain", "author_email": "terry@terrys-home.co.uk", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "==================\nsanic-json-logging\n==================\n\n.. image:: https://img.shields.io/pypi/v/sanic-json-logging.svg\n :target: https://pypi.python.org/pypi/sanic-json-logging\n\n.. image:: https://travis-ci.com/terrycain/sanic-json-logging.svg?branch=master\n :target: https://travis-ci.com/terrycain/sanic-json-logging\n\n.. image:: https://codecov.io/gh/terrycain/sanic-json-logging/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/terrycain/sanic-json-logging\n :alt: Code coverage\n\n.. image:: https://pyup.io/repos/github/terrycain/sanic-json-logging/shield.svg\n :target: https://pyup.io/repos/github/terrycain/sanic-json-logging/\n :alt: Updates\n\nThe other day I was running some containers on Amazon's ECS and logging to cloudwatch. I then learnt cloudwatch parses JSON logs so\nobviously I then wanted Sanic to log out JSON.\n\nIdeally this'll be useful to people but if it isn't, raise an issue and we'll make it better :)\n\nTo install:\n\n.. code-block:: bash\n\n pip install sanic-json-logging\n\nLook at ``examples/simple.py`` for a full working example, but this will essentially get you going\n\n.. code-block:: python\n\n import sanic\n from sanic_json_logging import setup_json_logging\n\n app = sanic.Sanic()\n setup_json_logging(app)\n\n\n``setup_json_logging`` does the following:\n\n- changes the default log formatters to JSON ones\n- also filters out no Keepalive warnings\n- unless told otherwise, will change the asyncio task factory, to implement some rudimentary task-local storage.\n- installs pre and post request middleware. Pre-request middleware to time tasks and generate a uuid4 request id. Post-request middleware to emit access logs.\n- will use AWS X-Forwarded-For IPs in the access logs if present\n\nIf ``setup_json_logging`` changed the task factory, all tasks created from the request's task will contain the request ID.\nYou can pass ``disable_json_access_log=True`` to the setup function which will disable the configuration of JSON access logging\n\nCurrently I have it outputting access logs like\n\n.. code-block:: json\n\n {\n \"timestamp\": \"2018-06-09T17:42:52.195701Z\",\n \"level\": \"INFO\",\n \"method\": \"GET\",\n \"path\": \"/endpoint1\",\n \"remote\": \"127.0.0.1:33468\",\n \"user_agent\": \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36\",\n \"host\": \"localhost:8000\",\n \"response_time\": 0.0,\n \"req_id\": \"795617c7-b514-4ed9-bb63-cc4fcd883c3d\",\n \"logger\": \"sanic.access\",\n \"status_code\": 200,\n \"length\": 0,\n \"type\": \"access\"\n }\n\nAnd if you log to the ``root`` logger, inside a request, it'll look like this.\n\n.. code-block:: json\n\n {\n \"timestamp\": \"2018-06-09T17:42:52.195326Z\",\n \"level\": \"INFO\",\n \"message\": \"some informational message\",\n \"type\": \"log\",\n \"logger\": \"root\",\n \"filename\": \"simple.py\",\n \"lineno\": 16,\n \"req_id\": \"795617c7-b514-4ed9-bb63-cc4fcd883c3d\"\n }\n\nChangelog\n---------\n\n1.3.0 - Added Request ID to `request` dict, fixed move to travis.com\n\n1.2.0 - Fixed UA header bug, fixed tests\n\n1.1.1 - Pretty much first decent version\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/terrycain/sanic-json-logging", "keywords": "sanic json logging", "license": "Apache 2", "maintainer": "", "maintainer_email": "", "name": "sanic-json-logging", "package_url": "https://pypi.org/project/sanic-json-logging/", "platform": "", "project_url": "https://pypi.org/project/sanic-json-logging/", "project_urls": { "Homepage": "https://github.com/terrycain/sanic-json-logging" }, "release_url": "https://pypi.org/project/sanic-json-logging/2.0.0/", "requires_dist": [ "sanic (>=19.3.1)" ], "requires_python": "", "summary": "Simple library to emit json formatted logs to stdout", "version": "2.0.0" }, "last_serial": 5556938, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "0ecc0df9160b320b3cfa7e3a8f4de44c", "sha256": "7ebd31a20d2b3d37a737bead960dd4cfdab22c7aa3f038a5a40542cc982504f7" }, "downloads": -1, "filename": "sanic_json_logging-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0ecc0df9160b320b3cfa7e3a8f4de44c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5889, "upload_time": "2018-06-09T18:25:33", "url": "https://files.pythonhosted.org/packages/81/5a/e0c3da03426bab96d76ed6c24fd2e5aad986184ac8b0c99384152595ee04/sanic_json_logging-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d8a3a2e110e9afe88ca495822ae9b2b", "sha256": "d17a629cfb4d634887d9697367a05fe8433b5606286037ddf1d0e3e38b22857e" }, "downloads": -1, "filename": "sanic-json-logging-0.1.1.tar.gz", "has_sig": false, "md5_digest": "5d8a3a2e110e9afe88ca495822ae9b2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5219, "upload_time": "2018-06-09T18:25:34", "url": "https://files.pythonhosted.org/packages/b7/3d/4ebfcd6c14b72048b18f116f9546a53331ec5c27c4be6487f94b0f9e488a/sanic-json-logging-0.1.1.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "979af1a4881e02835309409e975535ad", "sha256": "776a279d1fe894438c7fa103a683757011e3473fce9c370c741136fb6002ef92" }, "downloads": -1, "filename": "sanic_json_logging-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "979af1a4881e02835309409e975535ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5918, "upload_time": "2018-06-15T10:20:16", "url": "https://files.pythonhosted.org/packages/04/b6/4cff39f36420084636a73f3064b4f1cf913c78dd64950eb7db4ee9206237/sanic_json_logging-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5c712e17a99e5dc8e1852d395b530f1d", "sha256": "5fd400fe593388f68d9f5f2dc556e0aa42dc39f1846ddfc4804de0c7106f32a7" }, "downloads": -1, "filename": "sanic-json-logging-0.2.1.tar.gz", "has_sig": false, "md5_digest": "5c712e17a99e5dc8e1852d395b530f1d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5242, "upload_time": "2018-06-15T10:20:17", "url": "https://files.pythonhosted.org/packages/5a/8e/832475953210d47215704863bfe3a8a0feb9298fdf75f46cece60f83c3cf/sanic-json-logging-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "355f4a4bec82f6c00b02943068794b81", "sha256": "f88ccad238a6c4b3ef6df27a5d041b4f88c0f866273559dfad271f59671901e5" }, "downloads": -1, "filename": "sanic_json_logging-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "355f4a4bec82f6c00b02943068794b81", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5975, "upload_time": "2018-06-15T10:26:55", "url": "https://files.pythonhosted.org/packages/63/6d/f40b69d810981ab783af31c2e3d269ee80b08265941d93a0d0a636e99d6b/sanic_json_logging-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c50f633c1cc1b6430993327b9a23dff3", "sha256": "7bc48d2901fb5378b007d5fe923106d90cdfbca32a5f79e786d8a3f95fa288e4" }, "downloads": -1, "filename": "sanic-json-logging-0.2.2.tar.gz", "has_sig": false, "md5_digest": "c50f633c1cc1b6430993327b9a23dff3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5290, "upload_time": "2018-06-15T10:26:56", "url": "https://files.pythonhosted.org/packages/f6/9a/402054a2104a591407c817510716f41b3bb045f5228aaaa828b98847cc40/sanic-json-logging-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "e249c75f949ec1d70044cf4f45d4ce7d", "sha256": "0cae652fcd6a13f673894e7c2818a83fb39ffde88ccce1b86b53f70b34976d32" }, "downloads": -1, "filename": "sanic_json_logging-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e249c75f949ec1d70044cf4f45d4ce7d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5978, "upload_time": "2018-06-15T10:26:47", "url": "https://files.pythonhosted.org/packages/78/7c/003efc0a6e043c749f7068c6b32a75d48afbba8d677b616ba04f11bb13ac/sanic_json_logging-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e01b25dbba87ef81f723553ded0a068b", "sha256": "3e8873ad583f7a79a904b821f44454f95b2e3c917661207a11509566dab95df0" }, "downloads": -1, "filename": "sanic-json-logging-0.3.0.tar.gz", "has_sig": false, "md5_digest": "e01b25dbba87ef81f723553ded0a068b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5294, "upload_time": "2018-06-15T10:26:48", "url": "https://files.pythonhosted.org/packages/4a/a9/65f0c2f7c01691ffcdaa530c2f068be7ff945891edf2a09ca32f2a7e9d93/sanic-json-logging-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "c4b80ea20bd1a5a5dcc08871dddfb609", "sha256": "9243a80012d77abca0396c17b128a8e936b5290723959db681401787dd71c228" }, "downloads": -1, "filename": "sanic_json_logging-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c4b80ea20bd1a5a5dcc08871dddfb609", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6036, "upload_time": "2018-06-15T14:45:07", "url": "https://files.pythonhosted.org/packages/91/83/098c4e150bc92808a53c556c4c98985bc4391a58a910077d4814ce67e0a7/sanic_json_logging-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9ccabac58d67dadf0aca1380564c45cd", "sha256": "cb8cefbf40b9d544d7eafe72259214e401e4db0ee7b3035ca3c2641f731deeb7" }, "downloads": -1, "filename": "sanic-json-logging-0.3.1.tar.gz", "has_sig": false, "md5_digest": "9ccabac58d67dadf0aca1380564c45cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5346, "upload_time": "2018-06-15T14:45:08", "url": "https://files.pythonhosted.org/packages/04/d7/b9dd8d1d4c63dfee7dec1b4a34df20922134a82ad2172ab4cd759283cf11/sanic-json-logging-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "53aef9b39ef3aeee9928fe5324019eb0", "sha256": "a5a395e6601268411b84a8af3938c76ec6d104e7f767cd32d1ac5c243da3259a" }, "downloads": -1, "filename": "sanic_json_logging-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "53aef9b39ef3aeee9928fe5324019eb0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6027, "upload_time": "2018-06-15T14:53:48", "url": "https://files.pythonhosted.org/packages/72/a7/83ca9709696848e50696daa6f6a604283b34e3e86ccfed1e120d12d3d2b9/sanic_json_logging-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8bc7a314a5ac4caeac0b3de32556411b", "sha256": "51c7cead044223aedb2bf297b4cdaa435997a220742082f0979c1c4f40d1fe74" }, "downloads": -1, "filename": "sanic-json-logging-0.3.2.tar.gz", "has_sig": false, "md5_digest": "8bc7a314a5ac4caeac0b3de32556411b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5344, "upload_time": "2018-06-15T14:53:49", "url": "https://files.pythonhosted.org/packages/33/9d/f25445c8d2160674d643b8ae29c830525ccd2927e7fae31c3bab680525b2/sanic-json-logging-0.3.2.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "6499733dbe473cabfea90f06787b6f78", "sha256": "0730bfb5ab119fc157b3289f2e217e180ca15e37141376a45591d45576ad0667" }, "downloads": -1, "filename": "sanic_json_logging-0.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "6499733dbe473cabfea90f06787b6f78", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10224, "upload_time": "2018-12-07T11:40:08", "url": "https://files.pythonhosted.org/packages/6e/6a/8569dd1f43d7b341d6b0ca4b3579a030c2fb47ae78c09d7cc061963bad25/sanic_json_logging-0.3.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d48a3ce6201187b904264111ac44a6d", "sha256": "e05b00fe3412eeaea02abd824c9cebf140d8ec1c793e161a4ee09599f0cc3e41" }, "downloads": -1, "filename": "sanic-json-logging-0.3.5.tar.gz", "has_sig": false, "md5_digest": "5d48a3ce6201187b904264111ac44a6d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5467, "upload_time": "2018-12-07T11:40:09", "url": "https://files.pythonhosted.org/packages/a0/9b/adab66f4f874b71371e428e31c6635d17ecc4fbce8ea6aba81bf1e60adb8/sanic-json-logging-0.3.5.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "9ba8edf101f9c9305f726863ca9fa703", "sha256": "ea8376749cbab3abfc03035c1a4b006535cef8fec490a02c585931bf06d6a80d" }, "downloads": -1, "filename": "sanic_json_logging-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9ba8edf101f9c9305f726863ca9fa703", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10220, "upload_time": "2018-12-07T11:44:34", "url": "https://files.pythonhosted.org/packages/dd/4b/36b20f10e4872e5301221c01e332d0fd86be23e79834c16ba41f6753a260/sanic_json_logging-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "532d400d64d56d5eeb791a690e87a3a5", "sha256": "bfec6ea72d09e5045a0f6e00bcbf2a639ed9d4e156b17153b86226a00bc1b4a6" }, "downloads": -1, "filename": "sanic-json-logging-1.1.0.tar.gz", "has_sig": false, "md5_digest": "532d400d64d56d5eeb791a690e87a3a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5467, "upload_time": "2018-12-07T11:44:35", "url": "https://files.pythonhosted.org/packages/a3/29/4c03def0b3beeecf72136e9813db0e35b717db8eb4ff3d72f5fb52684169/sanic-json-logging-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "d06f0aefe97fb9f4234f1e3b3c17d39e", "sha256": "1d2ead079205296dc5fb4e9bc281e215cb3d7fd6d0472b42a073b0e388dded01" }, "downloads": -1, "filename": "sanic_json_logging-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d06f0aefe97fb9f4234f1e3b3c17d39e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10209, "upload_time": "2018-12-08T22:51:34", "url": "https://files.pythonhosted.org/packages/93/bb/02cb51182ddd02dad149adbd030cabc0f2f43458677fe245a3ee267d5875/sanic_json_logging-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "197ef73ab8ee6103fcee407a979ca715", "sha256": "7c50dfd43ccd09962e5c0c6e7d0b31384d47420009dd27463144b32a2547e21a" }, "downloads": -1, "filename": "sanic-json-logging-1.1.1.tar.gz", "has_sig": false, "md5_digest": "197ef73ab8ee6103fcee407a979ca715", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5451, "upload_time": "2018-12-08T22:51:36", "url": "https://files.pythonhosted.org/packages/83/99/6afa993406cf8c9755f272b68dc34b232ce19631f4807901eee8173d15f6/sanic-json-logging-1.1.1.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "419d6481c3c560fa6505e33c1115a29e", "sha256": "389b646f26a828dcd12987d51a2664b3f7724b6c368dfedde37f1e606789fd88" }, "downloads": -1, "filename": "sanic_json_logging-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "419d6481c3c560fa6505e33c1115a29e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10270, "upload_time": "2019-02-13T18:59:54", "url": "https://files.pythonhosted.org/packages/f5/e3/4f137bb394cd3f0944ecdc728595ae9b95312f679418c08ba5120e525b34/sanic_json_logging-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f394c089d982758352efa9dcd74bf7bf", "sha256": "8e7cff12db2765e472af9f084571d1216af48ab20bc329408e71429c994a0d93" }, "downloads": -1, "filename": "sanic-json-logging-1.2.0.tar.gz", "has_sig": false, "md5_digest": "f394c089d982758352efa9dcd74bf7bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5537, "upload_time": "2019-02-13T18:59:55", "url": "https://files.pythonhosted.org/packages/e2/34/59a3947b25e5f4ed06d47df3ee368b2899d83e6d2e117d79f54c027ef2d9/sanic-json-logging-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "a3d2c093d36e48bbaabac7fdc5cf3797", "sha256": "e06faceefa594ea6cd61caf7c55c313f99229cf3123f6c911efd3ca63a6b0a84" }, "downloads": -1, "filename": "sanic_json_logging-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a3d2c093d36e48bbaabac7fdc5cf3797", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10283, "upload_time": "2019-04-30T14:00:02", "url": "https://files.pythonhosted.org/packages/81/05/916adbeb270299a191178d7c6240eedc546d4599fc924c5f3b39346ec29b/sanic_json_logging-1.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "599727f19810a537598e05f43dc05e93", "sha256": "da0ed941763f86d3229c54864784162e221117ced63ddab3d77ebd3ec4648fc1" }, "downloads": -1, "filename": "sanic-json-logging-1.3.0.tar.gz", "has_sig": false, "md5_digest": "599727f19810a537598e05f43dc05e93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5565, "upload_time": "2019-04-30T14:00:05", "url": "https://files.pythonhosted.org/packages/31/d1/d515739b303b48207ff21748275e30a8a00b60dbf4324f205a51ce000e4d/sanic-json-logging-1.3.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "3ceda432fc7ef1749eaceff2e6a37fab", "sha256": "f086cc1c62f2d8c0b24573492fdeb230de9997e85b5000bdf7823342953831bc" }, "downloads": -1, "filename": "sanic_json_logging-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3ceda432fc7ef1749eaceff2e6a37fab", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10456, "upload_time": "2019-07-19T14:58:31", "url": "https://files.pythonhosted.org/packages/81/bf/4d43f1c2e3b1d212e8a87e3b284acaa0025e176a06bae4931741e5ea572e/sanic_json_logging-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "13a14dc9b3d8c20ff057715e77a42a53", "sha256": "16704f97cc710a3c7e65cac01e322d2f3a1091db8eab680b1ba2ada2763a68d2" }, "downloads": -1, "filename": "sanic-json-logging-2.0.0.tar.gz", "has_sig": false, "md5_digest": "13a14dc9b3d8c20ff057715e77a42a53", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5646, "upload_time": "2019-07-19T14:58:32", "url": "https://files.pythonhosted.org/packages/09/fe/18151910dfbcd12c8254aa5805609bc540ebc9c6eb9162f159cfbf9d5e28/sanic-json-logging-2.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3ceda432fc7ef1749eaceff2e6a37fab", "sha256": "f086cc1c62f2d8c0b24573492fdeb230de9997e85b5000bdf7823342953831bc" }, "downloads": -1, "filename": "sanic_json_logging-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3ceda432fc7ef1749eaceff2e6a37fab", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10456, "upload_time": "2019-07-19T14:58:31", "url": "https://files.pythonhosted.org/packages/81/bf/4d43f1c2e3b1d212e8a87e3b284acaa0025e176a06bae4931741e5ea572e/sanic_json_logging-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "13a14dc9b3d8c20ff057715e77a42a53", "sha256": "16704f97cc710a3c7e65cac01e322d2f3a1091db8eab680b1ba2ada2763a68d2" }, "downloads": -1, "filename": "sanic-json-logging-2.0.0.tar.gz", "has_sig": false, "md5_digest": "13a14dc9b3d8c20ff057715e77a42a53", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5646, "upload_time": "2019-07-19T14:58:32", "url": "https://files.pythonhosted.org/packages/09/fe/18151910dfbcd12c8254aa5805609bc540ebc9c6eb9162f159cfbf9d5e28/sanic-json-logging-2.0.0.tar.gz" } ] }