nazonohito51 / log-analyzer
分析日志文件。(例如:apache 访问日志/ltsv)
0.3.2
2019-08-06 02:16 UTC
Requires
- ext-simplexml: *
- clover/text-ltsv: ~1.0
- guiguiboy/php-cli-progress-bar: ^0.0.4
- kassner/log-parser: ~1.0
- phplucidframe/console-table: ~1.0
- symfony/finder: ^4.1
Requires (Dev)
- phpunit/phpunit: ~8
README
LogAnalyzer 是一个 PHP 库,用于分析日志文件(例如:apache 访问日志,ltsv)。此库以表格形式显示日志数据,并按维度组织。您可以指定维度作为日志数据键或进行编程计算。如果您想进行更详细的分析,可以递归地进行分析。
使用方法
简单使用。
use LogAnalyzer\CollectionBuilder; $collection = (new CollectionBuilder())->addApacheLog('path/to/apache1.log')->addApacheLog('path/to/apache2.log')->build(); $collection->dimension('request')->addColumn('host')->addColumn('HeaderUserAgent')->table()->display(); /* +---------------------------------+-------+-------------------------------+-----------------------------------------------------------------------------------------------------------------+ | request | Count | host | HeaderUserAgent | +---------------------------------+-------+-------------------------------+-----------------------------------------------------------------------------------------------------------------+ | GET /users/1/articles HTTP/1.0 | 1 | 133.130.35.34 | Mozilla/5.0 (Windows CE) AppleWebKit/5350 (KHTML, like Gecko) Chrome/13.0.888.0 Safari/5350 | | POST /users/1/articles HTTP/1.0 | 1 | 133.130.35.34 | Mozilla/5.0 (Windows CE) AppleWebKit/5350 (KHTML, like Gecko) Chrome/13.0.888.0 Safari/5350 | | GET / HTTP/1.1 | 3 | [23.96.184.214, 93.158.152.5] | Mozilla/5.0 (Windows CE) AppleWebKit/5350 (KHTML, like Gecko) Chrome/13.0.888.0 Safari/5350 | | GET /robots.txt HTTP/1.1 | 1 | 93.158.152.5 | Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) | | POST /users/2/profile HTTP/1.0 | 1 | 133.130.35.34 | Mozilla/5.0 (Macintosh; PPC Mac OS X 10_6_5) AppleWebKit/5312 (KHTML, like Gecko) Chrome/14.0.894.0 Safari/5312 | | POST /users/3/articles HTTP/1.0 | 1 | 133.130.35.35 | Mozilla/5.0 (X11; Linuxi686; rv:7.0) Gecko/20101231 Firefox/3.6 | | GET /login HTTP/1.1 | 1 | 66.249.79.82 | Mozilla/5.0 (compatible; MSIE 7.0; Windows 98; Win 9x 4.90; Trident/3.0) | +---------------------------------+-------+-------------------------------+-----------------------------------------------------------------------------------------------------------------+ */
计算维度值
您可以通过闭包来计算维度值。
use LogAnalyzer\CollectionBuilder; use LogAnalyzer\Items\ItemInterface; $collection = (new CollectionBuilder())->addApacheLog('path/to/apache1.log')->addApacheLog('path/to/apache2.log')->build(); $collection->dimension('request', function ($value) { // Remove HTTP method and HTTP version. if (preg_match('/[^\s]+\s([^\s]+)\sHTTP/', $value, $matches)) { return $matches[1]; } return null; })->addColumn('host')->addColumn('HeaderUserAgent')->table()->display(); /* +-------------------+-------+-------------------------------+-----------------------------------------------------------------------------------------------------------------+ | request | Count | host | HeaderUserAgent | +-------------------+-------+-------------------------------+-----------------------------------------------------------------------------------------------------------------+ | /users/1/articles | 2 | 133.130.35.34 | Mozilla/5.0 (Windows CE) AppleWebKit/5350 (KHTML, like Gecko) Chrome/13.0.888.0 Safari/5350 | | / | 3 | [23.96.184.214, 93.158.152.5] | Mozilla/5.0 (Windows CE) AppleWebKit/5350 (KHTML, like Gecko) Chrome/13.0.888.0 Safari/5350 | | /robots.txt | 1 | 93.158.152.5 | Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) | | /users/2/profile | 1 | 133.130.35.34 | Mozilla/5.0 (Macintosh; PPC Mac OS X 10_6_5) AppleWebKit/5312 (KHTML, like Gecko) Chrome/14.0.894.0 Safari/5312 | | /users/3/articles | 1 | 133.130.35.35 | Mozilla/5.0 (X11; Linuxi686; rv:7.0) Gecko/20101231 Firefox/3.6 | | /login | 1 | 66.249.79.82 | Mozilla/5.0 (compatible; MSIE 7.0; Windows 98; Win 9x 4.90; Trident/3.0) | +-------------------+-------+-------------------------------+-----------------------------------------------------------------------------------------------------------------+ */
递归分析
如果您想进行更详细的分析,可以从视图对象递归地获取集合对象。
use LogAnalyzer\CollectionBuilder; use LogAnalyzer\Items\ItemInterface; $collection = (new CollectionBuilder())->addApacheLog('path/to/apache1.log')->addApacheLog('path/to/apache2.log')->build(); $view = $collection->dimension('request'); $view->addColumn('host')->addColumn('HeaderUserAgent')->table()->display(); /* +---------------------------------+-------+-------------------------------+-----------------------------------------------------------------------------------------------------------------+ | request | Count | host | HeaderUserAgent | +---------------------------------+-------+-------------------------------+-----------------------------------------------------------------------------------------------------------------+ | GET /users/1/articles HTTP/1.0 | 1 | 133.130.35.34 | Mozilla/5.0 (Windows CE) AppleWebKit/5350 (KHTML, like Gecko) Chrome/13.0.888.0 Safari/5350 | | POST /users/1/articles HTTP/1.0 | 1 | 133.130.35.34 | Mozilla/5.0 (Windows CE) AppleWebKit/5350 (KHTML, like Gecko) Chrome/13.0.888.0 Safari/5350 | | GET / HTTP/1.1 | 3 | [23.96.184.214, 93.158.152.5] | Mozilla/5.0 (Windows CE) AppleWebKit/5350 (KHTML, like Gecko) Chrome/13.0.888.0 Safari/5350 | | GET /robots.txt HTTP/1.1 | 1 | 93.158.152.5 | Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) | | POST /users/2/profile HTTP/1.0 | 1 | 133.130.35.34 | Mozilla/5.0 (Macintosh; PPC Mac OS X 10_6_5) AppleWebKit/5312 (KHTML, like Gecko) Chrome/14.0.894.0 Safari/5312 | | POST /users/3/articles HTTP/1.0 | 1 | 133.130.35.35 | Mozilla/5.0 (X11; Linuxi686; rv:7.0) Gecko/20101231 Firefox/3.6 | | GET /login HTTP/1.1 | 1 | 66.249.79.82 | Mozilla/5.0 (compatible; MSIE 7.0; Windows 98; Win 9x 4.90; Trident/3.0) | +---------------------------------+-------+-------------------------------+-----------------------------------------------------------------------------------------------------------------+ */ $collection = $view->getCollection('GET / HTTP/1.1'); $collection->dimension('host')->addColumn('HeaderUserAgent')->table()->display(); /* +---------------+-------+---------------------------------------------------------------------------------------------+ | host | Count | HeaderUserAgent | +---------------+-------+---------------------------------------------------------------------------------------------+ | 23.96.184.214 | 1 | Mozilla/5.0 (Windows CE) AppleWebKit/5350 (KHTML, like Gecko) Chrome/13.0.888.0 Safari/5350 | | 93.158.152.5 | 2 | Mozilla/5.0 (Windows CE) AppleWebKit/5350 (KHTML, like Gecko) Chrome/13.0.888.0 Safari/5350 | +---------------+-------+---------------------------------------------------------------------------------------------+ */