As the title says, I've set the max length for the php error log, but it seems to keep growing much much larger than 1024. I am using the correct php.ini, I've restarted apache, etc. The permissions on the php log are 666.
As is typical for PHP, it is not really obvious from the name of the configuration setting, or even the documentation, but this directive applies to the length of a single log message, not the length of the log file as a whole.
Use logrotate or a similar tool for what you are trying to do.
Verified Pascal's initial thought:
log_errors_max_len integer
Set the maximum length of log_errors in bytes. In error_log information about the source is added. The default is 1024 and 0 allows to not apply any maximum length at all. This length is applied to logged errors, displayed errors and also to $php_errormsg. When an integer is used, the value is measured in bytes. Shorthand notation, as described in this FAQ, may also be used.
What the manual doesn't state is that log_errors_max_len
refers only to the "body" of the error message. This means that a single line of error will still be greater than the length you set here.
To demonstrate, run this code using log_errors_max_len=0
(0
means unlimited) and 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;
The bytes sent to error_log
will be:
[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
Next, test the same code with log_errors_max_len=4
and log_errors=1
. (Remember to restart the server.) error_log
will now be:
[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
(Notice that your error message is prepended with "[15-Jul-2015 01:23:45 utc] PHP Notice:
" and appended with "in C:\index.php on line 1
", resulting in a line longer than what is set by log_errors_max_len
.)
This issue occurs not just with error_log
, but also with the server output sent to the client. To demonstrate, run the same code above using log_errors_max_len=4
, display_errors=1
, html_errors=0
, error_prepend_string="PPPP"
, and error_append_string="AAAA"
. The output sent to the client is:
PPPP
Notice: Unde in C:\index.php on line 5
AAAAPPPP
Notice: Unde in C:\index.php on line 5
AAAA
Now run the same code using log_errors_max_len=4
, display_errors=1
, html_errors=1
, error_prepend_string="PPPP"
, and error_append_string="AAAA"
. (error_prepend_string
and error_append_string
apply only to displayed errors, not logged errors.) The output sent to the client is:
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
Also note that the above tests would return the same results even if you use ignore_repeated_errors=0
. This shows that "repeated errors" are considered before the error messages are cropped.
(Your results may differ depending on the SAPI used. Above tests are done using php-5.6.7-Win32-VC11-x86 CLI on win 8.1.)
© 2022 - 2024 — McMap. All rights reserved.
php.ini
configuration parameters that work together in a somewhat non-intuitive way. On your system, what are the values oflog-errors
php.net/manual/en/errorfunc.configuration.php#ini.log-errors anderror-log
php.net/manual/en/errorfunc.configuration.php#ini.error-log ? – Ennis