php.ini中的log_errors_max_len = 1024,但是php日志不断增长

时间:2009-12-27 17:51:03

标签: permissions php logfiles maxlength

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

3 个答案:

答案 0 :(得分:23)

正如PHP的典型情况一样,从配置设置名称甚至documentation开始并不是很明显,但此指令适用于单个日志消息的长度 ,而不是整个日志文件的长度。

使用logrotate或类似工具来完成您的工作。

答案 1 :(得分:7)

已验证Pascal's initial thought

  

log_errors_max_len整数

     

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

答案 2 :(得分:7)

手册没有说明log_errors_max_len仅将 引用到" body"错误消息。这意味着单个错误行仍然会比您在此处设置的长度更强

要演示,请使用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
‏

(请注意,您的错误消息前面带有&#34; [15-Jul-2015 01:23:45 utc] PHP Notice:&#34;并附加了&#34; in C:\index.php on line 1&#34;,导致行长于由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=1 html_errors=1 error_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,上述测试也会返回相同的结果。这表明&#34;重复错误&#34;在裁剪错误消息之前被视为之前

(您的结果可能因使用的SAPI而异。上面的测试是在win 8.1上使用php-5.6.7-Win32-VC11-x86 CLI完成的。)