我要分析access_log,然后将访问者的ip、日期、页面浏览量或图像视图存储到一个mysql表中。
我打算每分钟使用 cron 作业调用一个 php 脚本,打开 access_log。
但现在access_log
已经超过500MB,每分钟增加0.4MB左右。(通常 50-350 条记录)
那么如何在php中打开这么大的文件呢?读取最后 500 条记录,然后正则表达式获取最后一分钟的记录。我的服务器有 32GB RAM,内存没问题,但我需要更低的 CPU 使用率。任何人都可以帮助我一个简单的代码?谢谢。
编辑
听取@Jeremiah Winsley 的建议,我在 httpd.conf 中使用 rotatelogs。但是没有创建日志。问题出在哪里?
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" com bined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined env=!dontlog
CustomLog "|sbin/rotatelogs -f logs/my_log 60" combined env=!dontlog
#create a my_log every 1 minute.
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
SetEnvIf Remote_Addr "::1" dontlog
</IfModule>