【发布时间】:2019-01-16 15:10:18
【问题描述】:
我们有一个大型日志文件,用于捕获数据管理系统的 api 请求和响应。我们正在尝试使用以下方法来识别和计算正在使用的 api.methods:
$filename = (external file name on log server >1Gb)
$filecontents = file_get_contents($filename);
preg_match_all("/=> api.(.*)/", $filecontents, $apimethods);
$countmethods=array_count_values($apimethods[1]);
$countmethods 为我们提供了可以在页面上显示的数组。
我们知道这种方法并不理想,但正在努力寻找更好的方法。
这是在内部服务器上,因此我们增加了内存限制 - 但我们知道这不是很有效。
ini_set ('memory_limit', filesize ($a) + 10000000000);
【问题讨论】:
-
实现某种形式的日志轮换,而不是向一个庞大的文件添加越来越多的数据......?
-
你的意思是在
api之后转义点吗?用/=> api\.\K.*/将匹配的输出数组减半怎么样?然后只需在比赛中访问[0]。 (这不是一个可行的解决方案,只是一个想法,这就是我没有发布答案的原因。) -
为什么不将所有数据导入数据库?
-
日志数据是 json 格式,但由于日志的工作方式,它的格式无法转换 - 示例如下:
[16-01-2019 04:27:48]: Array ( [0] => api.search_results [1] => Array
标签: php preg-match file-get-contents