【问题标题】:Custom Apache log file based on regular expression基于正则表达式的自定义 Apache 日志文件
【发布时间】:2014-12-01 06:08:00
【问题描述】:

我正在处理一个需要特殊 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 来完成,但我仍然需要进一步推动正确的方向,拜托。

【问题讨论】:

    标签: regex apache mod-rewrite logging


    【解决方案1】:

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

    需要注意三点:

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

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

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

    【讨论】:

    • 感谢您的回答。因此,我采取了不同的方法。日志文件现在每 2 分钟轮换一次并进行分析。
    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 2011-12-02
    • 1970-01-01
    • 2012-06-21
    相关资源
    最近更新 更多