编辑:

编辑:

我想摆脱 Apache 中多余的日志记录。我发现教程如何使用setenvif 模块为此目的,设置变量dontlog

唯一的问题是,我在标准列表中没有看到对我来说最有趣的内容,即 http 状态。

我想做以下事情:

SetEnvIf Http_Status 200 dontlog

但似乎没有Http_Status支持SetEnvIf...

如何根据http状态过滤日志?

答案1

通过谷歌搜索,我发现了以下内容结果

每个状态代码的区分 我们都喜欢 HTTP 状态 200。它表示“OK”,这就是我们不感兴趣记录它的原因。最常见的情况是我们在日志中寻找某些特定的状态代码。mod_log_config您可以为每个需要的状态创建单独的日志。请查看此配置:

CustomLog ok.log "%200t %200a,%200{User-Agent}i %200U%200q %200s"
CustomLog redirections.log "%301t %301a,%301{User-Agent}i %301U%301q %301s"
CustomLog not_found.log "%404t %404a,%404{User-Agent}i %404U%404q %404s"
CustomLog server_error.log "%500t %500a,%500{User-Agent}i %500U%500q %500s"

它包含一个链接本网站

编辑:

(当前)文档显示mod_log_config匹配状态代码的选项:

通过在“%”后紧跟一个逗号分隔的状态代码列表,可以将特定项目限制为仅针对具有特定 HTTP 状态代码的响应进行打印。状态代码列表前面可以加上“!”以表示否定。

因此,我建议您通读该页面并配置CustomLog适合您需求的配置。我会先尝试以下方法:

CustomLog /dev/null "%200"

虽然文件名必须与 相对,ServerRoot但这里需要一些技巧。也许可以查看一些chroot文档,了解如何将文件 /dev/null 复制到ServerRoot.

答案2

这个表达式对我有用:(Apache v2.4.52)

CustomLog /var/log/not_200.log vhost_combined "expr=%{REQUEST_STATUS} != 200"

相关内容