{ "info": { "author": "Ryan Petrello", "author_email": "ryan@ryanpetrello.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Environment :: Web Environment", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Topic :: Internet :: WWW/HTTP :: WSGI", "Topic :: Software Development :: Libraries :: Application Frameworks" ], "description": "``canary`` is a small library for recording and shipping exceptions from Python to `logstash `_ via `ZeroMQ `_.\n\n.. _travis: http://travis-ci.org/ryanpetrello/canary\n.. |travis| image:: https://secure.travis-ci.org/ryanpetrello/canary.png\n\n|travis|_\n\nExample Usage\n-------------\n\nAssuming ``logstash`` is running and bound to a **0mq** socket at\n``tcp://0.0.0.0:2120``::\n\n $ cat logstash.conf\n input {\n zeromq {\n type => 'python-exception'\n mode => 'server'\n topology => 'pushpull'\n address => 'tcp://0.0.0.0:2120'\n charset => 'UTF-8'\n }\n }\n output {\n debug => true\n }\n\n...to report exceptions thrown by your WSGI application, wrap your WSGI app\nwith ``canary.middleware.LogStashMiddleware``:\n\n.. code:: python\n\n from logging.config import dictConfig as load_logging_config\n from wsgiref.simple_server import make_server\n from wsgiref.util import setup_testing_defaults\n \n from canary.middleware import LogStashMiddleware\n \n \n def app(environ, start_response):\n setup_testing_defaults(environ)\n assert True is False\n \n if __name__ == '__main__':\n load_logging_config({\n 'version': 1,\n 'loggers': {'canary': {'level': 'ERROR', 'handlers': ['zeromq']}},\n 'handlers': {\n 'zeromq': {\n 'level': 'ERROR',\n 'class': 'canary.handler.ZeroMQHandler',\n 'address': 'tcp://127.0.0.1:2120',\n 'formatter': 'logstash'\n }\n },\n 'formatters': {\n 'logstash': {\n '()': 'canary.format.LogstashFormatter'\n }\n }\n })\n \n httpd = make_server('', 8080, LogStashMiddleware(app))\n print \"Serving on port 8080...\"\n httpd.serve_forever()\n\nExcluding Certain Exceptions\n----------------------------\n\nYou may want to prevent ``canary`` from logging certain types of exceptions.\nTo do so, pass a list of exceptions into the ``LogStashMiddleware``\nconstructor:\n\n.. code:: python\n\n app = LogStashMiddleware(app, ignored_exceptions=[SomePrivateException])\n\nFiltering Sensitive Data\n------------------------\n\n``canary`` automatically populates exception logs with contextual data from the\nWSGI ``environ``. Sometimes, though, this data can contain sensitive details,\nlike customer's login credentials. ``canary`` makes it easy to filter certain\nrequest arguments from the logs it produces:\n\n.. code:: python\n\n app = LogStashMiddleware(app, sensitive_keys=['password', 'cc_number'])\n\nDevelopment\n-----------\n\nSource hosted at `GitHub `_.\nReport issues and feature requests on `GitHub\nIssues `_.\n\nTo fix bugs or add features to ``canary``, a GitHub account is required.\n\nThe general practice for contributing is to `fork canary\n`_ and make changes in the\n``next`` branch. When you're finished, `send a pull request\n`_ and your patch will\nbe reviewed.\n\nTests require ``tox`` and can be run with ``$ pip install tox && tox``.\n\nAll contributions must:\n\n* Include accompanying tests.\n* Include API documentation if new features or API methods are changed/added.\n* Be (generally) compliant with PEP8.\n* Not break the tests or build. Before issuing a pull request, ensure that all\n tests still pass across multiple versions of Python.\n", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/ryanpetrello/canary", "keywords": "web framework wsgi logstash logging zeromq", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "canary", "package_url": "https://pypi.org/project/canary/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/canary/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/ryanpetrello/canary" }, "release_url": "https://pypi.org/project/canary/0.1.4/", "requires_dist": null, "requires_python": null, "summary": "canary is a small library for recording and shipping exceptions from Python to logstash via ZeroMQ.", "version": "0.1.4" }, "last_serial": 787226, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "a731e13a05e44eb72408973f53d3a1d3", "sha256": "466f579e4ba4cb2ad1e732f8ba5f749f2126b6cd99c1a20e4b381c376f1c6998" }, "downloads": -1, "filename": "canary-0.1.0.tar.gz", "has_sig": false, "md5_digest": "a731e13a05e44eb72408973f53d3a1d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6977, "upload_time": "2013-02-19T22:36:37", "url": "https://files.pythonhosted.org/packages/4a/5a/de8dabc0facd7b8246e570381a09768bcdfa2a16d87a55b0225d4f4a49c8/canary-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "b823aff0a0006e6e77e4f2af4f4261f3", "sha256": "452548bb6af035f0f698e5d1b22ebd10ef57995ea2820864c6b34cc6547662d8" }, "downloads": -1, "filename": "canary-0.1.1.tar.gz", "has_sig": false, "md5_digest": "b823aff0a0006e6e77e4f2af4f4261f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7045, "upload_time": "2013-02-19T23:00:23", "url": "https://files.pythonhosted.org/packages/b9/1c/b7c66277b378da1dc4cd32a6302d91502d629aeb6a4afabf929fed6528dd/canary-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "82c23e1dc24f0e7ac37f2d545f6aad91", "sha256": "274cd9c81a58ac7e4a5ab9d12d4da40879828a80a34006aac9f8d61a8e8d70b1" }, "downloads": -1, "filename": "canary-0.1.2.tar.gz", "has_sig": false, "md5_digest": "82c23e1dc24f0e7ac37f2d545f6aad91", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7586, "upload_time": "2013-03-08T20:04:14", "url": "https://files.pythonhosted.org/packages/47/d5/fa6b080d707fb6a9ab60e65c6956ebf290d807066fa5c790f41d298e5424/canary-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "a9680455e1daa6714b62d5da4a4a50ef", "sha256": "9a5bd34d6eaef7c17619c6ff1cdb5462a3f4e7362315850d7228dec06777021e" }, "downloads": -1, "filename": "canary-0.1.3.tar.gz", "has_sig": false, "md5_digest": "a9680455e1daa6714b62d5da4a4a50ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7590, "upload_time": "2013-04-01T15:28:58", "url": "https://files.pythonhosted.org/packages/bf/44/71b2e0705f2cb48afda92715e6e62754f0332aca43ba68d0408b8cd4318a/canary-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "c97e8758971a7a43c72a556501f40535", "sha256": "ebd565ef561f8974b9ddf11a504c486a936c27fa85bac72768949dcea1847c6b" }, "downloads": -1, "filename": "canary-0.1.4.tar.gz", "has_sig": false, "md5_digest": "c97e8758971a7a43c72a556501f40535", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6863, "upload_time": "2013-04-11T16:09:21", "url": "https://files.pythonhosted.org/packages/32/97/3ab7ee9e2b7e68ad95b7c508203141cdf0174c441c0b1099df84e4e0a206/canary-0.1.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c97e8758971a7a43c72a556501f40535", "sha256": "ebd565ef561f8974b9ddf11a504c486a936c27fa85bac72768949dcea1847c6b" }, "downloads": -1, "filename": "canary-0.1.4.tar.gz", "has_sig": false, "md5_digest": "c97e8758971a7a43c72a556501f40535", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6863, "upload_time": "2013-04-11T16:09:21", "url": "https://files.pythonhosted.org/packages/32/97/3ab7ee9e2b7e68ad95b7c508203141cdf0174c441c0b1099df84e4e0a206/canary-0.1.4.tar.gz" } ] }