我想摆脱 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"