我正在开发一个项目,需要一个特殊的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”的文件(如果它尚不存在),包含这两个条目。
我在其他人中发现了这一点:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html并假设,它可以通过某种RegEx来完成,但我还需要进一步推动正确的方向,请。
答案 0 :(得分:1)
Apache不支持这种细粒度的日志引导。但是,您当然可以编写一个日志阅读器,从Apache日志中读取并随后写入相应的子日志。
有三件事需要注意:
Apache日志写入非原子,Apache使用无文件锁定。这意味着读取日志的程序无法保证上一个日志条目已完成,并且没有可靠的实时方法来判断Apache当前是否正在写入日志。
错误日志可以有多行,只有第一行符合您的模式。此外,许多CGI脚本将写入没有适当前缀的行。除非您自己编写所有代码,否则这很难控制。访问日志至少是非常标准的1行= 1条目,但带有前缀。
读者必须跟踪磁盘上某处的当前文件atime,ctime和size,这样如果它停止并重新启动,它就可以从停止的地方继续。此外,当Apache开始编写新日志时,它必须正确处理切换。 (旧日志已重命名。)