PHP Log All Errors to a Log File to Get Detailed Information

by on July 29, 2007 · 27 comments· LAST UPDATED April 14, 2008

in , ,

PHP offers simple but effective solution to log all errors to a log fiie.
On all production web server you must turn off displaying error to end users via a web browser. Remember PHP gives out lots of information about path, database schema and all other sort of sensitive information. You are strongly advised to use error logging in place of error displaying on production web sites. The idea is quite simple -only developer should see php error log.

How do I log all php errors to a log fiie?

Just add following line to /etc/php.ini to log errors to specified file – /var/log/php-scripts.log
# vi /etc/php.ini
Modify error_log directive
error_log = /var/log/php-scripts.log

Make sure display_errors set to Off (no errors to end users)
display_errors = Off

Save and close the file. Restart web server:
# /etc/init.d/httpd restart

How do I log errors to syslog or Windows Server Event Log?

Modify error_log as follows :
error_log = syslog

How do I see logs?

Login using ssh or download a log file /var/log/php-scripts.log using sftp:
$ sudo tail -f /var/log/php-scripts.log

Updated for accuracy!

TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 27 comments… read them below or add one }

1 Anjanesh July 30, 2007 at 3:22 am

It would be much better to have a single config php-file and define them there instead.

ini_set("log_errors" , "1");
ini_set("error_log" , "Errors.log.txt");
ini_set("display_errors" , "0");

Reply

2 rajesh April 13, 2011 at 7:49 am

thats excellent

Reply

3 Philipp July 30, 2007 at 7:26 am

You have to watch, that the logfile is writeable by the web-server process!

Reply

4 nixCraft July 30, 2007 at 9:27 pm

@Anjanesh, good point, user can set those from a php script itself.

@Philipp, yes I did assumed that Apache or lighttpd has a write permissions

Appreciate your posts!

Reply

5 Alekc January 22, 2008 at 11:48 am

Small misspelling in title: “log fiie”

Reply

6 nixCraft January 22, 2008 at 12:04 pm

Thanks for the heads up!

Reply

7 China Landscape May 9, 2008 at 9:19 am

I have ligttpd (PHP FastCGI) and I cannot see the log.

How can I get it in this case ?

Reply

8 Carl October 9, 2008 at 3:06 pm

“yes I did assumed that Apache or lighttpd has a write permissions”

In the case that it doesn’t, how can this be changed?

Reply

9 nixCraft October 9, 2008 at 3:13 pm

Carl,

Use chmod and chown command to set permissions.

Reply

10 Kurt October 24, 2008 at 7:31 am

Hellow,

Is it possible to log errors of diffrent websites in different errorfiles?

I have a server that’s hosting different websites and I want that all of the php-errors are logged in different file. For each website a file.

Is that possible and how do I do it?

tnx in advance

Reply

11 nixCraft October 24, 2008 at 11:28 am

Kurt,

You need to setup php as FastCGI which allows the -c option. With this option you can provide custom php.ini file and error log file for each user. See this article for more info. This is lighttpd specific but you should able to setup with Apache or any other server with mod_fastcgi.

HTH

Reply

12 Carl October 24, 2008 at 7:37 pm

@Kurt
You might try ini_set() as well if you have trouble getting custom php.ini files to work

Reply

13 Svetainiu Kurimas October 19, 2009 at 4:24 pm

Hi, does the init_set solution also work with Apache installed on Windows? It doe snot seem to be working for me.

Reply

14 Liju December 23, 2009 at 5:08 am

I think it would need to enable this tag (log_errors = On) php.ini to get this complete.

But I suggest it’s not a good Idea to enable on the main configuration file where a server hosted multiple sites. Just add this entries on .htaccess make sense on such case to trouble shoot.

Reply

15 lcd January 25, 2010 at 4:09 pm

You have great blog and this post is good!

Reply

16 Dhanesh Mane June 14, 2010 at 7:12 am

Hey ,

I think if you are error_log directive is set to syslog, then logs are save at /var/log/message.
On my server its set to syslog and the file /var/log/message is also updated but I am not able to find any php log data in this file.

any hint wat’s happening?

Reply

17 pawel August 12, 2010 at 10:21 am

what i read was enough to solve my issue, why im writing is to see if i get one nice picture with no.16 on the right :)

Reply

18 yuri December 30, 2010 at 1:31 am

I followed the steps above and its still not working, what should I do?

Reply

19 jyoti February 13, 2012 at 9:33 am

i am using php 5.3 with xamp server and get error ‘cannot write to file(../debug.log)’ please help me becaz i am new for php…thanks in advance

Reply

20 jyoti February 13, 2012 at 9:34 am

i am using php 5.3 with xamp server and get error ‘cannot write to file(../debug.log)’ please help me becaz i am new for php ..thanks in advance

Reply

21 Alexander April 10, 2012 at 7:10 am

It seems, user, under which you run php, does not have write permissions on specified file/directory. Check parent directory permissions, if is it writable.

I also had the same issue. I had path and settings for logging error file, but saw no file created till I set normal permissions.

Reply

22 Pavarti Izdelava July 19, 2012 at 7:52 am

Thank you for that post, it is working on my server.
I have additional question, how do you display friendly error to user, when fatal error occur.

Reply

23 Divya October 4, 2012 at 9:58 am

What can we do in case we need to delete log file entries older than 60 days or clean up logs older than 60 days in php?

Reply

24 Dmitry Pashkevich April 26, 2013 at 10:33 pm

If you redirect error output to a custom file, you’d have to care about log rotation yourself or it’ll grow infinitely.
If error logging is handled by the web server (default), then your web server will likely take care of that.

Reply

25 Ashish Kumar Laxkar July 26, 2013 at 10:05 am

Really helpful i have that problem from past 2 days now i resolve that… Thanks 4 support.. any update please mail…. ashish.laxkar16@gmail.com

Reply

26 Heidi April 2, 2014 at 2:36 pm

No matter if some one searches for his vital thing, thus he/she needs to be available that in detail, therefore that thing is maintained over here.

Reply

27 Neeke June 6, 2014 at 3:57 pm

error_log : no errors, no fixed format.

My advice is SeasLog. https://github.com/Neeke/SeasLog

Reply

Leave a Comment

Tagged as: , , , , , , , , , , ,

Previous post:

Next post: