【问题标题】:Apache 2 error log only shows the error message "0"Apache 2 错误日志仅显示错误消息“0”
【发布时间】:2013-12-31 02:55:04
【问题描述】:

几天以来,我的 Apache 2 错误日志显示了很多类似以下的消息(IP 地址和 URI 已编辑):

[Thu Dec 12 13:46:42 2013] [error] [client 111.222.333.444] 0
[Thu Dec 12 13:52:27 2013] [error] [client 222.333.444.555] 0, referer: http://www.mydomain.com/
[Thu Dec 12 13:52:27 2013] [error] [client 222.333.444.555] 0, referer: http://www.mydomain.com/
[Thu Dec 12 13:53:54 2013] [error] [client 333.444.555.666] 0, referer: http://www.mydomain.com/subdirectory/
[Thu Dec 12 13:46:42 2013] [error] [client 444.555.666.777] 0
[Thu Dec 12 13:54:07 2013] [error] [client aaaa:1111:2222:ffff::] 0, referer: http://www.otherdomain.com/subdirectory/

这是什么0?没有显示其他消息(有时除了一些其他正常消息,但很少)。

IP 地址是 IPv4 和 IPv6。我检查了访问日志中的相同日期/时间和 IP 地址。大多数情况下,我的网页上的不同 URI 在同一时间可以从该 IP 访问。但有时,根据访问日志没有访问。

这是一个共享托管环境,因此我无法访问 Apache 设置(但如果有帮助,我可以通过 ssh 访问我的主目录)。我已经用谷歌搜索并搜索了 Apache 文档,但没有找到任何东西(很难搜索“0”...)

/edit:我也问过webhoster,他们说不知道是什么原因造成的。我与 Apache 访问日志进行了交叉检查,这些是对 PHP 脚本(主要是 Joomla)的请求,也是对图像以及 JS 和 CSS 文件的请求。所以我认为这不是导致此问题的 PHP 脚本。

【问题讨论】:

  • 是否有任何 .htaccess 文件可能指定了 LogFormat 指令?
  • 不是我的。也许托管者在 httpd.conf 中添加了一些内容,但在这种情况下,托管者会知道并可以帮助我。

标签: apache apache2 error-log


【解决方案1】:

error_log 格式不可自定义,我怀疑它可以设置为更高的级别:调试或跟踪,它可以产生额外的信息。

另外请注意,error_log 包含来自 CGI/PHP/Perl 脚本的调试信息,因此某些通过 apache 作为其模块执行的脚本可以生成“零”。

【讨论】:

  • 根据access.log,出现错误时调用了几个PHP脚本。有时是 Joomla,有时是我自己的脚本之一,有时甚至只有图像/CSS/JS 文件。所以我怀疑这是我的一些脚本造成的。我仍然认为宿主对配置做了一些事情。
  • 请仔细阅读我的回复,error_log 在您的主机使用 apache 网络服务器之前是不可自定义的,如果它是 nginx 或其他任何东西,那么它可能会有所不同。如果您想找出该消息的根本原因,那么您需要对正在运行 apache 的服务器的 root 访问权限,并且当此消息发生时,strace httpd 会处理。但很可能 0 - 是某个 php 脚本函数的错误返回代码或消息。
  • 我明白你的回答。我的回复提到了你的第二段。调用的不是一个 PHP 脚本,而是 PHP、图像、CSS……不幸的是,我没有 root 访问权限,所以无法检查 httpd 进程。
  • 至少,您可以向您的托管服务支持团队询问该任务。
【解决方案2】:

如果您的 error_log 指令未设置,错误将写入当前 VirtualHost 的 Apache 日志文件中。 因此,请仔细检查您的 PHP configuration (php.ini) 或使用 phpinfo() 编写一个简单的页面

如果这是真的,你应该看看你的代码(甚至可能是 index.php)。

注意这一点:Apache /etc/php5/apache2/php.ini 和 CLI 配置 /etc/php5/cli/php.ini 通常有两个单独的 php.ini 文件。

还请注意,如果您想更改 PHP 配置,可以使用ini_set function

ini_set('error_log', '/var/log/php/error_new.log');

记住:目标目录必须存在,并且您的网络服务器(或 php 引擎)必须拥有所有写入权限。

【讨论】:

  • 我无法访问 php.ini,因为它是一个共享托管环境,但 phpinfo() 声明 no valueerror_log。在管理控制台中,我可以配置是否应将 PHP 的错误写入 Apache 的 error_log 并将其设置为“on”。我以前从未见过这个...我将其更改为“关闭”并监视 Apache 的错误日志。
  • 但是当我将错误日志的访问时间与访问日志进行比较时,有时在记录错误的第二秒内没有任何访问。没想到这些 PHP 脚本运行时间不超过一秒
  • 我已经更新了答案。请考虑 ini_set 建议。您可以将 PHP error_log 更改为您的 Web 应用程序主配置。
  • 谢谢!我将ini_set('error_log', '...'); 添加到主PHP 脚本中,现在0 被记录到此文件中。现在我必须搜索主要原因,但至少我知道是 Joomla,而不是 Apache。
猜你喜欢
  • 1970-01-01
  • 2015-06-25
  • 2017-01-14
  • 1970-01-01
  • 2015-08-21
  • 2012-06-04
  • 2013-03-04
  • 1970-01-01
  • 2012-09-12
相关资源
最近更新 更多