PHPLOVER
PHPLOVER

Reputation: 7257

Where does PHP store the error log? (PHP 5, Apache, FastCGI, and cPanel)

I am on shared hosting and have cPanel, Apache, and PHP is run by FastCGI. Where does PHP store the error log?

Is there another way I can find the error log on a shared hosting environment instead of having to go through entire site structure to look for error_log files?

I have access to the php.ini file (I am using PHP version 5.2.16).

Upvotes: 487

Views: 1332200

Answers (28)

Idiota
Idiota

Reputation: 85

I'm using php with cpanel, and I have found error logs are created in the same folder as the php script that generated the error. Accordingly I made a cron job to run daily,

/usr/bin/php -q /home/mysite/cron.php

with the following php:

$errors="";
foreach(explode("\n",shell_exec('find . -name error_log')) as $file)
    $errors.=$file.":\n".file_get_contents($file)."\n\n\n";
if(empty($errors)) exit(0);
mail("[email protected]","php error_log",$errors);

that will daily search for error logs, and email their filenames and contents to me if found.

Upvotes: -1

Md Masud
Md Masud

Reputation: 2711

If you are using Ngnix you should have error.log file located within var/log/ngnix/ directory.

Upvotes: 0

Freeman
Freeman

Reputation: 12748

something like this :

sudo locate error.log | xargs -IX grep -iH "errorlog" X

or

sudo locate error_log | xargs -IX grep -iH "errorlog" X

or

sudo find / -iname "error?log" 2>/dev/null | xargs -IX grep -iH "errorlog" X

Upvotes: 2

Rachel
Rachel

Reputation: 11

You can see the php errors for an account under:

/home/username/logs/domain_tld.php.error.log

You can set php error log globally and locally.

  1. Globally through WHM:

    • WHM -->> MultiPHP INI Editor --> "Editor Mode"
    • Select the version of PHP you would like to set the error log
    • Edit the parameter error_log. error_log = "/some/path" Change the filename to the desired error log file
    • Save changes
  2. Locally though cPanel:

    • CPanel -->> MultiPHP INI Editor --> "Editor Mode"
    • Select the version of PHP you would like to set the error log
    • Edit the parameter error_log. error_log = "/some/path"
    • Change the filename to the desired error log file

    Home directory will set the option for all domains, addons, and subdomains configured on the account A specific domain will limit the change to that domain, or, in the case of an addon domain, the addon and the matching subdomain

    • Save changes
  3. If PHP-fpm is enabled:

    • WHM --> MultiPHP Manager
    • Find the domain you'd like to change the error log location for
    • Click "Edit PHP-FPM"
    • Change the log location in "The error log file (error_log)" relative to the folder "logs" within the user's home directory
    • Save changes

Upvotes: 1

bitBirds Solutions
bitBirds Solutions

Reputation: 21

In a shared cPanel environment you cannot find the error log, if your hosting provider doesn’t provide any option in the cPanel dashboard. You can search "error" and see if your provider have any.

Otherwise normally you will find a file called "error_log" in your public_html file, which have all the PHP error recorded.

Upvotes: 1

Abhishek
Abhishek

Reputation: 2673

If you have build Apache and PHP from source, then the error logs by default is generated at your ${Apache install dir}/logs/error_log, i.e., generally /usr/local/apache2/logs/error_log.

Else, if you have installed it from the repository, you will find it at /var/log/apache2/error_log.

You can set the path in your php.ini also and verify it by invoking phpinfo().

Upvotes: 5

anemone928
anemone928

Reputation: 139

When configuring your error log file in php.ini, you can use an absolute path or a relative path. A relative path will be resolved based on the location of the generating script, and you'll get a log file in each directory you have scripts in. If you want all your error messages to go to the same file, use an absolute path to the file.

See more in Error Handling Functions.

Upvotes: 3

Cullub
Cullub

Reputation: 3258

Linux

php --info | grep error 

The terminal will output the error log location.

Windows

php --info | findstr /r /c:"error_log"

The command prompt will output the error log location.

To set the log location

Open your php.ini and add the following line:

error_log = /log/myCustomLog.log

Thanks chelmertz and Boom for these (comments on the question).

Upvotes: 71

Grzegorz Adam Kowalski
Grzegorz Adam Kowalski

Reputation: 5575

For PHP-FPM, just search the configuration file for error_log:

cat /etc/php-fpm.d/www.conf | grep error_log

php_admin_value[error_log] = /var/log/php-fpm/www-error.log

Upvotes: 2

Dewlance
Dewlance

Reputation: 531

cPanel Error logs are located in:

  • /usr/local/cpanel/logs/

  • /usr/local/apache/logs/

By default Apache logs are located inside:

  • /var/log/apache

or

  • /var/log/apache2

If anyone is using a custom log location then you can check it by running this command:

cat /etc/apache2/**conf**/httpd.conf | grep ErrorLog

If you are getting an error that the apache2 directory does not exist then you can run this command to find correct location by:

whereis apache

or

whereis apache2

Upvotes: 3

J4GD33P 51NGH
J4GD33P 51NGH

Reputation: 670

php --info | grep error

This is helpful.

Upvotes: 9

jkdev
jkdev

Reputation: 11748

Search the httpd.conf file for ErrorLog by running cat <file location> | grep ErrorLog on the command line. For example:

cat /etc/apache2/httpd.conf | grep ErrorLog

Output:

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
ErrorLog "/private/var/log/apache2/error_log"

Find the line that starts with ErrorLog and there's your answer.

Note: For virtual hosts, you can edit the virtual hosts file httpd-vhosts.conf to specify a different log file location.

Upvotes: 3

DarkNeuron
DarkNeuron

Reputation: 8701

NGINX usually stores it in /var/log/nginx/error.log or access.log (on Ubuntu in any case).

Upvotes: 6

Vivek
Vivek

Reputation: 492

It can also be /var/log/apache2/error.log if you are in Google Compute Engine.

And you can view the tail like this:

tail -f /var/log/apache2/error.log

Upvotes: 14

ThorSummoner
ThorSummoner

Reputation: 18169

It appears that, by default, PHP does not log errors anywhere. The error_log key in php.ini is commented out in all the installs I've seen.

Generally I:

  1. look for php.ini files. locate php.ini.

  2. Search these files for the error_reporting value;

    Which should be set to whatever amalgamation of PHP log levels are enough for you.,

    For example: E_ALL & ~E_DEPRECATED & ~E_STRICT

  3. Check the error_log value to make sure it points to an actual place and is not commented out.

    The default value doesn't give a full path, only a file name, I don't know where this path resolves to normally. Probably /var/log/.

Upvotes: 13

Thomas Bennett
Thomas Bennett

Reputation: 647

The best way is to look in your httpd.conf file and see what the default is. It could also be overridden by your specific virtual host. I start by looking at /etc/httpd/conf/httpd.conf or /etc/apache2/httpd.conf and search for error_log. It could be listed as either /var/log/httpd/error_log or /var/log/apache2/error_log, but it might also be listed as simply logs/error_log.

In this case it is a relative path, which means it will be under /etc/httpd/logs/error_log. If you still can't find it, check the bottom of your httpd.conf file and see where your virtual hosts are included. It might be in /etc/httpd/conf.d/ <- as "other" or "extra". Your virtual host could override it then with ErrorLog "/path/to/error_log".

Upvotes: 5

Eric Leschinski
Eric Leschinski

Reputation: 154083

How to find your PHP error log on Linux:

sudo updatedb

[sudo] password for eric:

sudo locate error_log

/var/log/httpd/error_log

Another equivalent way:

sudo find / -name "error_log" 2>/dev/null

/var/log/httpd/error_log

Upvotes: 20

Allie
Allie

Reputation: 381

On a LAMP environment the PHP errors are be default directed to this below file.

/var/log/httpd/error_log

All access logs come under:

/var/log/httpd/access_log

Upvotes: 38

Stan James
Stan James

Reputation: 2555

WordPress

WordPress will direct error_log() messages to /wp-content/debug.log when WP_DEBUG_LOG is set to true.

See WordPress documentation for WP_DEBUG_LOG

Upvotes: 1

mateusz.szymborski
mateusz.szymborski

Reputation: 1720

If you use the php5-fpm log default, it should be under:

/var/log/php5-fpm.log

Upvotes: 3

cfphpflex
cfphpflex

Reputation: 603

Wherever you want it to, if you set it in your function call:

error_log($errorMessageforLog . "\n", 4, 'somePath/SomeFileName.som');

Upvotes: 4

Krishna Pariyar
Krishna Pariyar

Reputation: 111

You are on a shared environment and cannot find error log. Always check if cPanel has option Errors in your cPanel dashboard. If you are not being able to find the error log, then you can find it there.

In the cPanel search bar, search Error, it will show Error Pages which are basically lists of different HTTP error pages and other Error is where the error logs are displayed.

Other places to look in a shared environment:

  • /home/yourusername/logs
  • /home/yourusername/public_html/error_log

Upvotes: 2

Fusseldieb
Fusseldieb

Reputation: 1374

Mine for some reason stored it in:

/var/log/php-errors.log

I'm using Ubuntu Server 16.04 (Xenial Xerus) and PHP 7.1.28.

Upvotes: 1

otman soulimani
otman soulimani

Reputation: 85

For CentOS 8 it is var/log/httpd/error_log.

Upvotes: 2

Adam Arold
Adam Arold

Reputation: 30568

PHP stores error logs in /var/log/apache2 if PHP is an apache2 module. Shared hosts are often storing log files in your root directory /log subfolder. But...if you have access to a php.ini file you can do this:

error_log = /var/log/php-scripts.log

According to rinogo's comment: If you're using cPanel, the master log file you're probably looking for is stored (by default) at

/usr/local/apache/logs/error_log

If all else fails you can check the location of the log file using

<?php phpinfo(); ?>

Upvotes: 390

mailo
mailo

Reputation: 2611

You should use absolute path when setting error_log variable in your php.ini file, otherwise, error logs will be stored according to your relative path.

error_log = /var/log/php.errors

Other solution would be writing simple script which would list all error logs files from directory tree.

Upvotes: 12

Dan Allen
Dan Allen

Reputation: 144

I can guarantee you, I am not the only person who has been driven to madness at least once in a frustrating search for a log file. It seems like it should be the easiest thing to find in the whole system.

A definitive guide on where the PHP error log is stored would be a complicated bit of work. The official PHP manual does not even try to address the whole topic, because there are dependencies on systems outside PHP, such as the operating system (Linux vs. Windows, which distribution of Linux), including settings within Windows and Linux that affect the name and location of the PHP error log.

Until someone takes the time to write a complete, cross-system guide, the best you are going to get is general directions where you can inquire. Every PHP developer has had to endure agony in this pursuit, with one exception. If you work in one place and the information is provided when you first need it, then you have the information need forever, that is, until you find yourself in a new working environment. There are such fortunate people.

If the information is not given to you on a silver platter, so to speak, you have some hunting to do. The hunt is not the longest you will face in your career, but it is not the simplest either.

As is evident from the many answers already posted, a smart place to begin is the output of phpinfo(). To view it, create a PHP file containing this:

<?php
    phpinfo();

Either browse to that file or run it from the command line. If you do both, you likely will find the error_log is in different places, depending on command line vs. web server use of PHP. That is because the PHP interpreter that runs on a web server is not the same PHP interpreter that runs from the command line, even when the command line is on the same machine as the web server. The answers already posted in here mostly are making an unstated assumption that PHP is running as part of a web server.

Sample output from phpinfo() via web server and web browser

The default for error_log is no value

Default error_log in php running as an Apache mod.

Whatever the value is, it comes from the php.ini files used to configure PHP. There can be many php.ini files. Finding your way among them is confusing at first, but you do not need to deal with this to find your PHP log.

If the output from phpinfo() shows a full path to a file, that is where the log is. You are lucky.

The trick is there usually is not a full path indicated in phpinfo(). When there is not a full path, the location depends on:

  1. Whether error_log is no value. If it is, the log file location will depend on the operating system and the mode PHP is running. If PHP is running as an Apache module, on Linux the log often is in /var/log/apache2/error.log. Another likely spot is in a logs directory in your account home directory, ~/logs/error.log.

  2. If there is a file name without a path, the location depends on whether the file name has the value syslog. If it syslog, then the PHP error log is injected into the syslog for the server, which varies by Linux distribution. A common location is /var/log/syslog, but it can be anywhere. Even the name of the syslog varies by distribution.

  3. If the name without a path is not syslog, a frequent home for the file is is the document root of the website (a.k.a., website home directory, not to be confused with the home directory for your account).

This cheat sheet has been helpful in some situations, but I regret to have to admit it is not nearly universal. You have my condolences.

Enter image description here

Upvotes: 6

chelmertz
chelmertz

Reputation: 20601

Try phpinfo() and check for "error_log"

Upvotes: 103

Related Questions