Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 基于正则表达式的定制Apache日志文件_Regex_Apache_Mod Rewrite_Logging - Fatal编程技术网

Regex 基于正则表达式的定制Apache日志文件

Regex 基于正则表达式的定制Apache日志文件,regex,apache,mod-rewrite,logging,Regex,Apache,Mod Rewrite,Logging,我正在做一个项目,它需要一个特殊的Centos Apache服务器设置。所有条目都必须经过预处理并按特定条件排序,然后放入单独的日志文件中 以这些Apache请求为例: http://logs.domain.com/log.gif?obj=test01|id=886655774|e=via|r=4524925241 http://logs.domain.com/log.gif?obj=test01|id=886655774|e=via|r=9746354562 对于每个条目,Apache必须通

我正在做一个项目,它需要一个特殊的Centos Apache服务器设置。所有条目都必须经过预处理并按特定条件排序,然后放入单独的日志文件中

以这些Apache请求为例:

http://logs.domain.com/log.gif?obj=test01|id=886655774|e=via|r=4524925241
http://logs.domain.com/log.gif?obj=test01|id=886655774|e=via|r=9746354562
对于每个条目,Apache必须通过请求URL进行搜索。如果找到“obj”-参数,则必须创建具有此名称的日志。在本例中,将创建一个名为“test01”的文件(如果它不存在),其中包含这两个条目


我发现了这一点:并且假设,它可以用某种正则表达式来完成,但我仍然需要朝正确的方向进一步推动。Apache不支持这种细粒度日志定向。但是,您当然可以编写一个日志读取器,从Apache日志中读取日志,然后写入相应的子日志

有三件事需要注意:

  • Apache日志写入是非原子的,Apache使用无文件锁定。这意味着读取日志的程序无法保证最后一个日志条目已完成,并且没有可靠的实时方法来判断Apache当前是否正在写入日志

  • 错误日志可以有多行,并且只有第一行与您的模式匹配。此外,许多CGI脚本将编写没有适当前缀的行。除非您自己编写所有代码,否则这是很难控制的。至少,访问日志是相当标准的带有前缀的1行=1条目

  • 读卡器必须跟踪当前文件的atime、ctime和磁盘上某个位置的大小,这样,如果停止并重新启动,它就可以在停止的地方继续。此外,它必须在Apache开始编写新日志时正确处理切换。(旧日志已重命名。)


  • 谢谢你的回答。因此,我采取了不同的方法。日志文件现在每2分钟旋转一次并进行分析。