繁体   English   中英

基于正则表达式的自定义Apache日志文件

[英]Custom Apache log file based on regular expression

我正在开发一个项目,该项目需要特殊的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来完成,但是我仍然需要朝着正确的方向进一步努力,请。

Apache不支持这种细粒度的日志定向。 但是,您当然可以编写一个日志读取器,该读取器从Apache日志读取并随后写入适当的子日志。

有三件事要注意:

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

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

  3. 阅读器必须跟踪磁盘上某个位置的当前文件atime,ctime和大小,以便如果停止并重新启动该文件,则它可以从中断处继续。 此外,当Apache开始编写新日志时,它必须正确处理切换。 (旧日志已重命名。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM