{ "info": { "author": "John Thorvald Wodder II", "author_email": "apachelogs@varonathe.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP :: HTTP Servers", "Topic :: System :: Logging", "Topic :: Text Processing :: Filters" ], "description": ".. image:: http://www.repostatus.org/badges/latest/active.svg\n :target: http://www.repostatus.org/#active\n :alt: Project Status: Active \u2014 The project has reached a stable, usable\n state and is being actively developed.\n\n.. image:: https://travis-ci.com/jwodder/apachelogs.svg?branch=master\n :target: https://travis-ci.com/jwodder/apachelogs\n\n.. image:: https://codecov.io/gh/jwodder/apachelogs/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/jwodder/apachelogs\n\n.. image:: https://img.shields.io/pypi/pyversions/apachelogs.svg\n :target: https://pypi.org/project/apachelogs/\n\n.. image:: https://img.shields.io/github/license/jwodder/apachelogs.svg\n :target: https://opensource.org/licenses/MIT\n :alt: MIT License\n\n.. image:: https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg\n :target: https://saythanks.io/to/jwodder\n\n`GitHub `_\n| `PyPI `_\n| `Documentation `_\n| `Issues `_\n| `Changelog `_\n\n``apachelogs`` parses Apache access log files. Pass it a `log format string\n`_ and get back a\nparser for logfile entries in that format. ``apachelogs`` even takes care of\ndecoding escape sequences and converting things like timestamps, integers, and\nbare hyphens to ``datetime`` values, ``int``\\s, and ``None``\\s.\n\n\nInstallation\n============\n``apachelogs`` requires Python 3.5 or higher. Just use `pip\n`_ for Python 3 (You have pip, right?) to install\n``apachelogs`` and its dependencies::\n\n python3 -m pip install apachelogs\n\n\nExamples\n========\n\nParse a single log entry::\n\n >>> from apachelogs import LogParser\n >>> parser = LogParser(\"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\")\n >>> # The above log format is also available as the constant `apachelogs.COMBINED`.\n >>> entry = parser.parse('209.126.136.4 - - [01/Nov/2017:07:28:29 +0000] \"GET / HTTP/1.1\" 301 521 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\"\\n')\n >>> entry.remote_host\n '209.126.136.4'\n >>> entry.request_time\n datetime.datetime(2017, 11, 1, 7, 28, 29, tzinfo=datetime.timezone.utc)\n >>> entry.request_line\n 'GET / HTTP/1.1'\n >>> entry.final_status\n 301\n >>> entry.bytes_sent\n 521\n >>> entry.headers_in[\"Referer\"] is None\n True\n >>> entry.headers_in[\"User-Agent\"]\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'\n >>> # Log entry components can also be looked up by directive:\n >>> entry.directives[\"%r\"]\n 'GET / HTTP/1.1'\n >>> entry.directives[\"%>s\"]\n 301\n >>> entry.directives[\"%t\"]\n datetime.datetime(2017, 11, 1, 7, 28, 29, tzinfo=datetime.timezone.utc)\n\nParse a file full of log entries::\n\n >>> with open('/var/log/apache2/access.log') as fp: # doctest: +SKIP\n ... for entry in parser.parse_lines(fp):\n ... print(str(entry.request_time), entry.request_line)\n ...\n 2019-01-01 12:34:56-05:00 GET / HTTP/1.1\n 2019-01-01 12:34:57-05:00 GET /favicon.ico HTTP/1.1\n 2019-01-01 12:34:57-05:00 GET /styles.css HTTP/1.1\n # etc.\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jwodder/apachelogs", "keywords": "Apache,access logs,httpd,logfiles", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "apachelogs", "package_url": "https://pypi.org/project/apachelogs/", "platform": "", "project_url": "https://pypi.org/project/apachelogs/", "project_urls": { "Bug Tracker": "https://github.com/jwodder/apachelogs/issues", "Documentation": "https://apachelogs.readthedocs.io", "Homepage": "https://github.com/jwodder/apachelogs", "Say Thanks!": "https://saythanks.io/to/jwodder", "Source Code": "https://github.com/jwodder/apachelogs" }, "release_url": "https://pypi.org/project/apachelogs/0.5.0/", "requires_dist": [ "attrs (>=17.1)", "pydicti (~=1.1)" ], "requires_python": "~=3.5", "summary": "Parse Apache access logs", "version": "0.5.0" }, "last_serial": 5298960, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "bceae41ae5de0d86825c155645128443", "sha256": "7eb1fda56dc73f46ee58a198f50e9e09819b086d3c91fa5c23710a68686a7c70" }, "downloads": -1, "filename": "apachelogs-0.1.0-py3-none-any.whl", "has_sig": true, "md5_digest": "bceae41ae5de0d86825c155645128443", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.5", "size": 15425, "upload_time": "2019-05-06T19:59:44", "url": "https://files.pythonhosted.org/packages/87/53/febf13457c3fb83898f392dcf4f4e5410c4c42b87fbc17e072e57e5eca76/apachelogs-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cbde61b67ace22e1ac54cc77f0bb471d", "sha256": "e87b986d201444bb0267d9acb4459de10812dfc51a05e687066c1aa781164b3e" }, "downloads": -1, "filename": "apachelogs-0.1.0.tar.gz", "has_sig": true, "md5_digest": "cbde61b67ace22e1ac54cc77f0bb471d", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.5", "size": 22359, "upload_time": "2019-05-06T19:59:46", "url": "https://files.pythonhosted.org/packages/0a/89/9726bcbccd4d8e938d75544604c7757df4e1a6c7ee8e65b8934bef0296e9/apachelogs-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "b3214b2337d18920543ad1844b986597", "sha256": "83ca0844545cb9cb0599cca05856390a7032ceb883fa36bf61dbc3d0aa953253" }, "downloads": -1, "filename": "apachelogs-0.2.0-py3-none-any.whl", "has_sig": true, "md5_digest": "b3214b2337d18920543ad1844b986597", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.5", "size": 15765, "upload_time": "2019-05-09T18:46:01", "url": "https://files.pythonhosted.org/packages/2a/c8/ec3f1e986bb31dc356b98c0225d26ca648655ded99517bb2a088efad8145/apachelogs-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e5f50ab8f80c14c420b93de7acee7a5", "sha256": "e91563ecbfd80e85b22004926be46d9cd0ad8f31d90e9eb407df8b03cd4f75e1" }, "downloads": -1, "filename": "apachelogs-0.2.0.tar.gz", "has_sig": true, "md5_digest": "9e5f50ab8f80c14c420b93de7acee7a5", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.5", "size": 23402, "upload_time": "2019-05-09T18:46:03", "url": "https://files.pythonhosted.org/packages/16/31/1b1a618f97ebde8abc96c1d74c57615b5fdf2045ee5b79f620bc986679cf/apachelogs-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "b51e2895c25f1d2d20171886ff0e6f0c", "sha256": "a2cb91b39b6ac0c88c82780f046855087a2caebce0688a2f26c2111f2b1bbd48" }, "downloads": -1, "filename": "apachelogs-0.3.0-py3-none-any.whl", "has_sig": true, "md5_digest": "b51e2895c25f1d2d20171886ff0e6f0c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.5", "size": 16140, "upload_time": "2019-05-12T17:28:00", "url": "https://files.pythonhosted.org/packages/be/f5/4a833c8c0abe81dca9668cf85dd9a5fd06d125c35469d1878f43951a159e/apachelogs-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0a4c654b4736c1d7e0cda7a23ff7c8ab", "sha256": "10a3c21b0baa953edbb6d8b97d3a1da84627bb2bfbd7245f61040e1970d03cdc" }, "downloads": -1, "filename": "apachelogs-0.3.0.tar.gz", "has_sig": true, "md5_digest": "0a4c654b4736c1d7e0cda7a23ff7c8ab", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.5", "size": 25766, "upload_time": "2019-05-12T17:28:02", "url": "https://files.pythonhosted.org/packages/ca/d2/6f100f1f8486c79f3edc10cc3767a17ac202763488016160ee9e216bc27b/apachelogs-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "dc17d65366d2dc915f7b2073ce9c5ca5", "sha256": "57f111c9d2cbe1ea96aee6c9c60ae1707bbc53c382fc3d1b57292d05e6ce499b" }, "downloads": -1, "filename": "apachelogs-0.4.0-py3-none-any.whl", "has_sig": true, "md5_digest": "dc17d65366d2dc915f7b2073ce9c5ca5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.5", "size": 17257, "upload_time": "2019-05-19T01:14:41", "url": "https://files.pythonhosted.org/packages/81/21/7d4ac7c35f203b6b0d1ea0354e871b045075ed2d3386162bbdccd8a6edc0/apachelogs-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5c02bc76b5a7abbd08dc192ae9d03560", "sha256": "73e09c7efbe784801c5acdb91258ca226d6e4a41f3a8ef8ed3967e25c65eaae2" }, "downloads": -1, "filename": "apachelogs-0.4.0.tar.gz", "has_sig": true, "md5_digest": "5c02bc76b5a7abbd08dc192ae9d03560", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.5", "size": 27763, "upload_time": "2019-05-19T01:14:43", "url": "https://files.pythonhosted.org/packages/2c/0f/79b72243eb903db4685becc5f54900a5a0c83242560ae854a16c55a7d726/apachelogs-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "45a63a878bb807d1eac2b75f4012d602", "sha256": "911b83491cac2c1935d1cbe64b2d6215069ee03b3e623ea32124d5dd53179acf" }, "downloads": -1, "filename": "apachelogs-0.5.0-py3-none-any.whl", "has_sig": true, "md5_digest": "45a63a878bb807d1eac2b75f4012d602", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.5", "size": 18229, "upload_time": "2019-05-21T17:32:10", "url": "https://files.pythonhosted.org/packages/24/04/6b23e6ec1458bf64c2a11b5bbc2552b8866b3df226800b4c388ae9ce5e1e/apachelogs-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "44ebeafae41f82695d2fcd3f96b66552", "sha256": "c07daf70aef9c2fdbb95acc940e38a3d87cb28419b03ffd7eba83055eba559f8" }, "downloads": -1, "filename": "apachelogs-0.5.0.tar.gz", "has_sig": true, "md5_digest": "44ebeafae41f82695d2fcd3f96b66552", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.5", "size": 31018, "upload_time": "2019-05-21T17:32:12", "url": "https://files.pythonhosted.org/packages/ed/57/bdc2f47212e164d1ace738a2847fc6f22022ee632749b612a99e44831c5c/apachelogs-0.5.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "45a63a878bb807d1eac2b75f4012d602", "sha256": "911b83491cac2c1935d1cbe64b2d6215069ee03b3e623ea32124d5dd53179acf" }, "downloads": -1, "filename": "apachelogs-0.5.0-py3-none-any.whl", "has_sig": true, "md5_digest": "45a63a878bb807d1eac2b75f4012d602", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.5", "size": 18229, "upload_time": "2019-05-21T17:32:10", "url": "https://files.pythonhosted.org/packages/24/04/6b23e6ec1458bf64c2a11b5bbc2552b8866b3df226800b4c388ae9ce5e1e/apachelogs-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "44ebeafae41f82695d2fcd3f96b66552", "sha256": "c07daf70aef9c2fdbb95acc940e38a3d87cb28419b03ffd7eba83055eba559f8" }, "downloads": -1, "filename": "apachelogs-0.5.0.tar.gz", "has_sig": true, "md5_digest": "44ebeafae41f82695d2fcd3f96b66552", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.5", "size": 31018, "upload_time": "2019-05-21T17:32:12", "url": "https://files.pythonhosted.org/packages/ed/57/bdc2f47212e164d1ace738a2847fc6f22022ee632749b612a99e44831c5c/apachelogs-0.5.0.tar.gz" } ] }