【问题标题】:log_errors_max_len = 1024 in php.ini, but php log keeps growingphp.ini 中的 log_errors_max_len = 1024,但 php 日志不断增长
【发布时间】:2009-12-27 17:51:02
【问题描述】:

正如标题所说,我设置了 php 错误日志的最大长度,但它似乎一直在增长,远大于 1024。我使用的是正确的 php.ini,我已经重新启动了 apache,等等。 php日志的权限是666。

【问题讨论】:

标签: permissions php logfiles maxlength


【解决方案1】:

已验证Pascal's initial thought

log_errors_max_len整数

设置log_errors的最大长度 以字节为单位。在error_log信息中 关于来源已添加。默认 是 1024 和 0 允许不应用任何 最大长度。 这个长度是 应用于记录的错误,显示 错误以及 $php_errormsg。 何时 使用整数,值为 以字节为单位。速记符号, 如本常见问题解答中所述,也可能是 用过。

【讨论】:

  • 该文档显然不正确。 log_errors 是一个布尔值,所以“log_errors 的最大长度”是无稽之谈。
  • @Adrien 提交错误
【解决方案2】:

手册没有说明的是log_errors_max_len指的是错误消息的“正文”。这意味着单行错误仍将大于您在此处设置的长度。

为了演示,使用log_errors_max_len=00 表示无限制)和log_errors=1 运行此代码:

<?php
// Set your server to these settings:
// error_reporting=-1 
// date.timezone=utc ;to suppress the error message "It is not safe to rely on the system's timezone settings."...
echo$msg1; echo$msg2;

发送到error_log 的字节将是:

[15-Jul-2015 01:23:45 utc] PHP Notice:  Undefined variable: msg1 in C:\index.php on line 5
[15-Jul-2015 01:23:45 utc] PHP Notice:  Undefined variable: msg2 in C:\index.php on line 5
‏

接下来,使用log_errors_max_len=4log_errors=1 测试相同的代码。 (记得重启服务器。)error_log 现在是:

[15-Jul-2015 01:23:45 utc] PHP Notice:  Unde in C:\index.php on line 5
[15-Jul-2015 01:23:45 utc] PHP Notice:  Unde in C:\index.php on line 5
‏

(请注意,您的错误消息前面带有“[15-Jul-2015 01:23:45 utc] PHP Notice:”并附加了“in C:\index.php on line 1”,导致行长于log_errors_max_len 设置的行。)

此问题不仅发生在error_log 中,还发生在发送到客户端的服务器输出中。为了演示,使用log_errors_max_len=4display_errors=1html_errors=0error_prepend_string="PPPP"error_append_string="AAAA" 运行上述相同的代码。发送给客户端的输出是:

PPPP
Notice: Unde in C:\index.php on line 5
AAAAPPPP
Notice: Unde in C:\index.php on line 5
AAAA

现在使用 log_errors_max_len=4display_errors=1html_errors=1error_prepend_string="PPPP"error_append_string="AAAA" 运行相同的代码。 (error_prepend_stringerror_append_string 仅适用于显示的错误,而不适用于记录的错误。)发送到客户端的输出是:

PPPP<br />
<b>Notice</b>:  Unde in <b>C:\index.php</b> on line <b>5</b><br />
AAAAPPPP<br />
<b>Notice</b>:  Unde in <b>C:\index.php</b> on line <b>5</b><br />
AAAA

另请注意,即使您使用ignore_repeated_errors=0,上述测试也会返回相同的结果。这表明“重复错误”被认为是错误消息被裁剪之前。

(根据使用的 SAPI,您的结果可能会有所不同。以上测试是在 win 8.1 上使用 php-5.6.7-Win32-VC11-x86 CLI 完成的。)

【讨论】:

    【解决方案3】:

    正如 PHP 的典型特征,从配置设置的名称,甚至 documentation 上看都不是很明显,但该指令适用于单个日志消息的长度,而不是整个日志文件的长度。

    使用 logrotate 或类似的工具来做你想做的事情。

    【讨论】:

      猜你喜欢
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 2010-11-20
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多