Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP CLI won't log errors

PHP currently will not log errors produced from the command line.

I have:

log_errors = On error_log = /var/log/php_errors.log 

in file /etc/php5/cli/php.ini.

Am I missing a further setting to get this working?

like image 901
bcmcfc Avatar asked Jun 17 '11 14:06

bcmcfc


People also ask

How do I enable PHP error logging?

Enable Error Logging in php. If you want to enable PHP error logging in individual files, add this code at the top of the PHP file. ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); Now, you must enable only one statement to parse the log errors in the php.

Where do I log PHP errors?

If the syslog is used, then all PHP errors will be sent directly to the default system log file—in Linux, this is typically /var/log/syslog. The more manageable method is to use a custom log file.

How do I show PHP errors?

Quickly Show All PHP Errors The quickest way to display all php errors and warnings is to add these lines to your PHP code file: ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);

How can we log error messages to a file?

Approach 1: The error_log() function can be used to send error messages to a given file. First argument to the function is the error message to be sent. Second argument tells where to send/log the error message. In this case, second argument is set to 3, used to redirect error message to a file.


2 Answers

Please check that the user account running PHP CLI has write access to /var/log/php_errors.log.

Additionally, you can verify that you are using the correct php.ini file like this:

php -a -c /etc/php5/cli/php.ini 
like image 78
George Cummins Avatar answered Oct 05 '22 13:10

George Cummins


This question and answer thread was very helpful to me while setting up PHP CLI logging on an Ubuntu 12.04 (Precise Pangolin) environment, so I wanted to post an answer that distills what I learned. In addition to the great information provided by David Chan as well as George Cummins, I have created a logrotate.d script to ensure the PHP CLI error log doesn’t grow out of control as well as set this up so multiple users will be able to log errors to the common PHP CLI error log.

First, the default behavior of the PHP CLI is to log error messages to standard output; logging to a file is not default behavior. Which usually means logging to the same command line terminal session that is running the PHP CLI command. While the PHP ini file does have accommodations for a specified error_log additional accommodations need to be made to truly make it work.

First, I had to create an initial php_errors.log file:

sudo touch /var/log/php_errors.log 

Since the server in question is used by web developers working on various projects, I have set up a common group for them called www-users. And in this case, I want the php_errors.log to be readable and writable by www-users I change the ownership of the file like this:

sudo chown root:www-users /var/log/php_errors.log 

And then change the permissions of the file to this:

sudo chmod 664 /var/log/php_errors.log 

Yes, from a security standpoint having a log file readable and writable by anyone in www-users is not so great. But this is a controlled shared work environment. So I trust the users to respect things like this. And besides, when PHP is run from the CLI, any user who can do that will need write access to the logs anyway to even get a log written.

Next, go into /etc/php5/cli/php.ini to adjust the default Ubuntu 12.04 settings to match this new log file:

sudo nano /etc/php5/cli/php.ini 

Happily log_errors is enabled by default in Ubuntu 12.04:

log_errors = On 

But to allow logging to a file we need to change the error_log to match the new file like this:

error_log = /var/log/php_errors.log 

Setup a logrotate.d script.

Now that should be it, but since I don’t want logs to run out of control I set a logrotate.d for the php_errors.log. Create a file called php-cli in /etc/logrotate.d/ like this:

sudo nano /etc/logrotate.d/php-cli 

And place the contents of this log rotate daemon script in there:

/var/log/php_errors.log {         weekly         missingok         rotate 13         compress         delaycompress         copytruncate         notifempty         create 664 root www-users         sharedscripts } 

Testing the setup.

With that done, let’s test the setup using David Chan’s tip:

php -r "error_log('This is an error test that we hope works.');" 

If that ran correctly, you should just be bounced back to an empty command prompt since PHP CLI errors are no longer being sent to standard output. So check the actual php_errors.log for the test error message like this:

tail -n 10 /var/log/php_errors.log 

And there should be a timestamped error line in there that looks something like this:

[23-Jul-2014 16:04:56 UTC] This is an error test that we hope works. 
like image 27
Giacomo1968 Avatar answered Oct 05 '22 15:10

Giacomo1968