Download the PHP package benmorel/apache-log-parser without Composer
On this page you can find all versions of the php package benmorel/apache-log-parser. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package apache-log-parser
Apache Log Parser
A PHP library to parse Apache logs.
Installation
This library is installable via Composer. Just run:
Requirements
This library requires PHP 7.1 or later.
Project status & release process
This library is under development.
The current releases are numbered 0.x.y
. When a non-breaking change is introduced (adding new methods, optimizing
existing code, etc.), y
is incremented.
When a breaking change is introduced, a new 0.x
version cycle is always started.
It is therefore safe to lock your project to a given release cycle, such as 0.1.*
.
If you need to upgrade to a newer release cycle, check the release history
for a list of changes introduced by each further 0.x.0
version.
Package contents
This library provides a single class, Parser
.
Quick start
First construct a Parser
object with the LogFormat
defined in the httpd.conf file of the server that generated the log file:
The library converts every format string of your log format to a field name;
the list of fields can be accessed through the getFieldNames()
method:
You're then ready to parse a single line of your log file: the parse()
method accepts the log line,
and a boolean to indicate whether you want the results as a numeric array, whose keys match the ones of the field names array:
Or as an associative array, with the field names as keys:
If a line cannot be parsed, an InvalidArgumentException
is thrown. Be sure to wrap your parse()
calls in a try-catch block:
Field names returned by the library
This table shows how format strings are mapped to field names by the library:
Format string | Field name |
---|---|
%a |
clientIp |
%{c}a |
clientIp:c |
%A |
localIp |
%B |
responseSize |
%b |
responseSize |
%{VARNAME}C |
cookie:VARNAME |
%D |
responseTime |
%{VARNAME}e |
env:VARNAME |
%f |
filename |
%h |
remoteHostname |
%H |
requestProtocol |
%{VARNAME}i |
requestHeader:VARNAME |
%k |
keepaliveRequests |
%l |
remoteLogname |
%L |
requestLogId |
%m |
requestMethod |
%{VARNAME}n |
note:VARNAME |
%{VARNAME}o |
responseHeader:VARNAME |
%p |
canonicalPort |
%{FORMAT}p |
canonicalPort:FORMAT |
%P |
processId |
%{FORMAT}P |
processId:FORMAT |
%q |
queryString |
%r |
firstRequestLine |
%R |
handler |
%s |
status |
%t |
time |
%{FORMAT}t |
time:FORMAT |
%T |
timeToServe |
%{UNIT}T |
timeToServe:UNIT |
%u |
remoteUser |
%U |
urlPath |
%v |
serverName |
%V |
serverName |
%X |
connectionStatus |
%I |
bytesReceived |
%O |
bytesSent |
%S |
bytesTransferred |
%{VARNAME}^ti |
requestTrailerLine:VARNAME |
%{VARNAME}^to |
responseTrailerLine:VARNAME |
If two or more format strings yield the same field name, the second one will get a :2
suffix, the third one a :3
suffix, etc.
Performance notes
You can expect to parse more than 250,000 records per second (> 50 MiB/s) when reading logs from a file on a modern server with an SSD drive.
Returning records as an associative array comes with a small performance penalty of about 6%.