kassner / log-parser
PHP 日志解析库
2.2.0
2024-08-20 20:01 UTC
Requires
- php: >=7.4.0
README
将 Apache/Nginx/Varnish/HAProxy 日志解析成 PHP 对象,以便编程处理数据。
安装
composer require kassner/log-parser:~2.2
用法
$parser = new \Kassner\LogParser\LogParser(); $lines = file('/var/log/apache2/access.log', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); foreach ($lines as $line) { $entry = $parser->parse($line); }
$entry 对象将保存所有解析的数据。如果行不匹配定义的格式,则会抛出 \Kassner\LogParser\FormatException
。
object(Kassner\LogParser\SimpleLogEntry)#4 (8) { ["host"]=> string(14) "193.191.216.76" ["logname"]=> string(1) "-" ["user"]=> string(8) "www-data" ["stamp"]=> int(1390794676) ["time"]=> string(26) "27/Jan/2014:04:51:16 +0100" ["request"]=> string(53) "GET /wp-content/uploads/2013/11/whatever.jpg HTTP/1.1" ["status"]=> string(3) "200" ["responseBytes"]=> string(5) "58678" }
自定义
日志格式
您可以自定义日志格式(默认情况下,它与Apache 常见日志格式相匹配)
# default Nginx format: $parser->setFormat('%h %l %u %t "%r" %>s %O "%{Referer}i" \"%{User-Agent}i"');
支持的格式字符串
以下是 Apache 支持的完整日志格式字符串列表,以及库是否支持它们
注意:当使用标记为
X
的选项时,您应该真的阅读注释。
自定义格式
参见#50 (评论)
条目对象
在 2.0.0
之前,可以通过覆盖 createEntry
方法来覆盖返回的条目对象。由于严格类型,这不再可能,所以您必须使用新创建的接口。
首先,创建两个新的类,您的条目对象以及负责创建它的工厂
class MyEntry implements \Kassner\LogParser\LogEntryInterface { } class MyEntryFactory implements \Kassner\LogParser\LogEntryFactoryInterface { public function create(array $data): \Kassner\LogParser\LogEntryInterface { // @TODO implement your code here to return a instance of MyEntry } }
然后将工厂作为第二个参数传递给 LogParser
构造函数
$factory = new MyEntryFactory(); $parser = new \Kassner\LogParser\LogParser(null, $factory); $entry = $parser->parse('193.191.216.76 - www-data [27/Jan/2014:04:51:16 +0100] "GET /wp-content/uploads/2013/11/whatever.jpg HTTP/1.1" 200 58678');
$entry
将是 MyEntry
的一个实例。