正如标题所说,我已经为 php 错误日志设置了最大长度,但它似乎一直比 1024 大得多。我使用的是正确的 php.ini,我已经重新启动了 apache,等等。 php日志是666。
3 回答
与 PHP 的典型情况一样,从配置设置的名称,甚至文档中都看不出来,但该指令适用于单个日志消息的长度,而不是整个日志文件的长度。
使用 logrotate 或类似的工具来做你想做的事情。
验证了帕斯卡最初的想法:
以字节为单位设置 log_errors 的最大长度。在 error_log 中添加了有关源的信息。默认值为 1024,0 允许根本不应用任何最大长度。此长度适用于记录的错误、显示的错误以及 $php_errormsg。使用整数时,该值以字节为单位。也可以使用本常见问题解答中描述的速记符号。
手册没有说明的是log_errors_max_len
仅指错误消息的“正文”。这意味着单行错误仍然会大于您在此处设置的长度。
为了演示,使用log_errors_max_len=0
(0
表示无限制)和运行此代码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=4
和测试相同的代码log_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=4
, display_errors=1
, html_errors=0
,error_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=4
现在使用, display_errors=1
, html_errors=1
,error_prepend_string="PPPP"
和运行相同的代码error_append_string="AAAA"
。(error_prepend_string
并且error_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 完成的。)