Source code for apachelogs

r"""
Parse Apache access logs

``apachelogs`` parses Apache access log files.  Pass it a `log format string
<http://httpd.apache.org/docs/current/mod/mod_log_config.html>`_ and get back a
parser for logfile entries in that format.  ``apachelogs`` even takes care of
decoding escape sequences and converting things like timestamps, integers, and
bare hyphens to ``datetime`` values, ``int``\s, and ``None``\s.

Visit <https://github.com/jwodder/apachelogs> or <https://apachelogs.rtfd.io>
for more information.
"""

__version__      = '0.1.0'
__author__       = 'John Thorvald Wodder II'
__author_email__ = 'apachelogs@varonathe.org'
__license__      = 'MIT'
__url__          = 'https://github.com/jwodder/apachelogs'

from .errors import Error, InvalidDirectiveError, InvalidEntryError, \
                    UnknownDirectiveError
from .parser import LogEntry, LogParser
from .util   import parse_apache_timestamp

__all__ = [
    'COMBINED',
    'COMBINED_DEBIAN',
    'COMMON',
    'COMMON_DEBIAN',
    'Error',
    'InvalidDirectiveError',
    'InvalidEntryError',
    'LogEntry',
    'LogParser',
    'UnknownDirectiveError',
    'VHOST_COMBINED',
    'VHOST_COMMON',
    'parse',
    'parse_apache_timestamp',
    'parse_lines',
]

#: Common log format (CLF)
COMMON = "%h %l %u %t \"%r\" %>s %b"

#: `COMMON` with virtual host prepended
VHOST_COMMON = "%v %h %l %u %t \"%r\" %>s %b"

#: NCSA extended/combined log format
COMBINED = "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""

#: Like `COMMON`, but with ``%O`` (total bytes sent including headers) in place
#: of ``%b`` (size of response excluding headers)
COMMON_DEBIAN = "%h %l %u %t \"%r\" %>s %O"

#: Like `COMBINED`, but with ``%O`` (total bytes sent including headers) in
#: place of ``%b`` (size of response excluding headers)
COMBINED_DEBIAN = "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-agent}i\""

#: `COMBINED_DEBIAN` with virtual host & port prepended
VHOST_COMBINED = "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\""

[docs]def parse(format, entry, encoding='iso-8859-1', errors=None): """ A convenience function for parsing a single logfile entry without having to directly create a `LogParser` object. ``encoding`` and ``errors`` have the same meaning as for `LogParser`. """ return LogParser(format, encoding=encoding, errors=errors).parse(entry)
[docs]def parse_lines(format, entries, encoding='iso-8859-1', errors=None, ignore_invalid=False): """ A convenience function for parsing an iterable of logfile entries without having to directly create a `LogParser` object. ``encoding`` and ``errors`` have the same meaning as for `LogParser`. ``ignore_invalid`` has the same meaning as for `LogParser.parse_lines()`. """ return LogParser(format, encoding=encoding, errors=errors)\ .parse_lines(entries, ignore_invalid)