apache error_log 默认 warn 级别过低,需用 errorloglevel 按模块精细控制日志级别;php 错误需单独配置 php 的 error_log 和 error_reporting;还需确保日志路径权限正确、磁盘空间充足、logrotate 配置合理。

Apache 的 error_log 默认等级太低,Warn 及以下错误(比如 PHP 警告、模块加载失败细节、重写规则匹配过程)根本不会记录,查故障时只能干瞪眼。
怎么用 ErrorLogLevel 精确控制日志详细程度
Apache 2.4+ 引入了 ErrorLogLevel(旧版本用 LogLevel),它比老式 LogLevel warn 更细粒度,支持按模块指定级别。不推荐全局设成 debug——日志爆炸且含大量无关信息。
-
ErrorLogLevel debug:只对当前虚拟主机或目录生效,适合临时排查某段配置 -
ErrorLogLevel authz_core:debug proxy_http:info:多个模块可并列,用空格分隔;未指定的模块仍走全局默认 - 常见有效值从低到高:
emerg→alert→crit→error→warn→notice→info→debug -
debug级别会暴露请求处理各阶段(如 URI 解析、模块钩子调用),但某些模块(如mod_ssl)需额外编译支持才能输出完整调试信息
为什么改了 ErrorLogLevel 还看不到 PHP 错误
PHP 错误默认不走 Apache error_log,而是由 PHP 自己的 error_log 配置决定。Apache 只记录 PHP 模块本身的问题(如 mod_php 初始化失败)。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 确保 PHP 配置中
log_errors = On且error_log指向与 Apache 同一文件(如/var/log/apache2/error.log) - 若用 PHP-FPM,要检查
www.conf中的php_admin_value[error_log]和catch_workers_output = yes - Apache 的
php_value error_reporting只影响运行时报告级别,不改变日志输出目标
ErrorLog 文件权限和轮转不配好,故障时可能写不进日志
即使日志级别调高,如果 Apache 工作进程(通常是 www-data 或 apache 用户)没权限写入 ErrorLog 路径,或者磁盘满、inode 耗尽,日志就静默失效。
- 检查路径父目录权限:
ls -ld /var/log/apache2—— 组/用户需有w权限 - 确认
ErrorLog文件属主匹配运行用户:chown www-data:www-data /var/log/apache2/error.log - 用
logrotate配置轮转时,必须包含create 640 www-data www-data,否则新日志文件权限错误 - 重启 Apache 后执行
sudo -u www-data touch /var/log/apache2/error.log测试写入能力
真正卡住排查的,往往是日志没写进去,而不是级别不够高。先验证 ErrorLog 路径可写、PHP/FPM 日志目标一致、模块名拼写正确(比如 rewrite 不是 rewrites),再调级别。










