PHP在哪里存储错误日志?(php5,apache,fastcgi,cpanel)


392

我在共享主机上,并由fastcgi运行Cpanel,Apache,PHP。PHP在哪里存储错误日志?

还有什么其他方法可以在共享主机环境中找到错误日志,而不必遍历整个站点结构来查找error_log文件?

我可以访问php.ini(我正在使用PHP版本5.2.16)。


25
在Linux上,/var/log/httpd/error_log或者/var/log/apache2/error.log。这些文件由root拥有,因此您需要是root或使用sudo它才能看到或读取它。
Eric Leschinski 2014年

112
php --info | grep error
sjas 2014年

8
对于正在寻找Windows解决方案的用户,请使用php --info | findstr /r /c:"error_log"来查看日志文件的位置。
2015年

1
对我来说很奇怪...我托管了网站,PHP日志与Apache日志存储在同一文件中...在管理面板的日志中,当我单击它时,可以选择显示完整的Apache错误日志,例如,有关用户进入不应进入的地方的错误。但是,同样,在同一文件中,有PHP显示的错误。
RedClover

如果使用fastcgi,则@soaku apache本身不会运行PHP。当您使用Apache模块的mod_php时,apache处理php。这意味着使用mod_php时,错误可能并且很可能会出现在apache日志中,但是使用cgi或fastcgi时不会出现这种情况
Gall Annonim

Answers:


314

/var/log/apache2如果PHP是apache2模块,则PHP将存储错误日志。共享主机通常将日志文件存储在您的根目录/log子文件夹中。但是...如果您有权访问php.ini文件,则可以执行以下操作:

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

根据rinogo的评论:如果您使用的是cPanel,则可能要查找的主日志文件(默认情况下)存储在

/usr/local/apache/logs/error_log

如果其他所有方法均失败,则可以使用以下命令检查日志文件的位置

<?php phpinfo(); ?>

20
“如果Linux是apache2,则php将错误日志存储在/ var / log / apache2中”,而不是RHEL等,其中软件包名称为'httpd'。确实不能假设软件包名称在发行版之间是一致的。
切尔默兹

28
仅供Google使用者参考-如果您使用的是cPanel,则可能要查找的主日志文件(默认情况下)存储在/usr/local/apache/logs/error_log
rinogo 2013年

5
但请检查其中的“ error_log”部分<?php phpinfo(); ?>以确认路径
doub1ejack

如果不是apache2模块怎么办。例如,它可能是在nginx上运行的debian的fpm软件包。
n611x007

2
它将在phpinfo部分显示它吗?在error_log中,我看到的所有键/值都是'error_log'并且没有实际路径
Robert Sinclair

86

尝试phpinfo()检查“ error_log”


13
它只是说error_log没有指定路径。我猜可能是因为它位于共享主机环境中,如果我们可以访问它,我们将看到其他所有人的网站错误。
PHPLOVER 2011年

8
如果您尝试,@ PHPLOVER会说同样的话echo ini_get('error_log');吗?
chelmertz 2011年

我没有尝试,但是在php.ini文件中说的相同,所以我所做的是更改php.ini文件中的路径,并检查它是否正常工作。尽管我更改了记录错误的路径(文档根外部),它仍然记录所有错误吗?谢谢phplover
PHPLOVER 2011年

2
@PHPLOVER:您可以通过设置error_reporting(E_ALL|E_STRICT);se.php.net/manual/en/function.error-reporting.php
chelmertz 2011年

3
我的也说error_log,不知道在哪里寻找。这在Google上打出了nr,但没有回答。
HMR 2014年

53

的Linux

php --info | grep error 

终端将输出错误日志位置。

视窗

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

命令提示符将输出错误日志位置

设置日志位置

打开您的php.ini并添加以下行:

error_log = /log/myCustomLog.log

感谢@chelmertez@Boom的这些(有关问题的评论)。


5
我在Linux上。这没有为我提及日志位置。
Sirex

1
@Sirex会php -info输出什么吗?您需要确定php实际上是在调用PHP来运行...
Cullub '16

1
另外,php当前可能未记录任何内容。在这种情况下,您可以打开php.ini,并将其设置error_reportingE_ALL & ~E_DEPRECATED & ~E_STRICT,或者您要查看的任何错误,然后设置error_log为您要记录错误的目录的路径。(注意:这不是文件的完整路径,只是目录的完整路径。)
Cullub '16

1
我只在/ var / log / httpd /中找到大多数人建议查看的日志,但是运行使php --info | grep log我指向最近的日志所在的/ var / www / logs。
ChrisBob

1
设置日志位置后,请不要忘记重启Apache:sudo /etc/init.d/apache2 restart
BrianHenryIE

31

在LAMP环境中,php错误默认定向到以下文件。

/var/log/httpd/error_log

所有访问日志位于:

/var/log/httpd/access_log

因此,注释掉php错误日志文件规范,它将写在这里吗?
用户

17

如何在Linux上找到PHP错误日志:

eric@dev /var $ sudo updatedb
[sudo] password for eric:
eric@dev /var $ sudo locate error_log

/var/log/httpd/error_log

另一种等效的方式:

eric@dev /home/eric $ sudo find / -name "error_log" 2>/dev/null

/var/log/httpd/error_log

12

看来,默认情况下php 不会在任何地方记录错误,error_logphp.ini中的键在我所见过的所有安装中均已注释掉。

通常我:

  1. 查找php.ini文件。locate php.ini
  2. 在这些文件中搜索error_reporting值;

    应该将其设置为php日志级别的任意组合足以满足您的需求。

    例如: E_ALL & ~E_DEPRECATED & ~E_STRICT

  3. 检查该error_log值以确保它指向实际位置且未注释掉。

    默认值不提供完整路径,仅提供文件名,我不知道该路径通常解析到的位置。大概吧/var/log/


11

在php.ini文件中设置error_log变量时,应使用绝对路径,否则,错误日志将根据您的相对路径进行存储。

error_log = /var/log/php.errors

其他解决方案是编写简单的脚本,该脚本将列出目录树中的所有错误日志文件。


10

/var/log/apache2/error.log如果您使用的是Google计算引擎,也可以。

您可以像这样查看尾巴:

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

5

如果您已从源代码构建Apache和PHP,则默认情况下会在您的${Apache install dir}/logs/error_logIE 上生成错误日志/usr/local/apache2/logs/error_log。否则,如果您是从存储库安装的,则可以在找到它。/var/log/apache2/error_log您还可以在自己的路径中设置路径,php.ini并通过调用进行验证phpinfo()


5

最好的方法是在您的httpd.conf文件中查找默认值。您的特定虚拟主机也可能会覆盖它。我先查看/etc/httpd/conf/httpd.conf/etc/apache2/httpd.conf搜索error_log。它既可以列为/ var / log / httpd / error_log /var/log/apache2/error_log,也可以列为simple logs/error_log

在这种情况下,这是一条相对路径,这意味着它将位于下/etc/httpd/logs/error_log。如果仍然找不到它,请检查httpd.conf文件的底部,并查看虚拟主机的位置。它可能在/etc/httpd/conf.d/<-中作为“其他”或“其他”。您的虚拟主机可以使用ErrorLog“ / path / to / error_log”覆盖它。


4

在php.ini中配置错误日志文件时,可以使用绝对路径或相对路径。相对路径将根据生成脚本的位置进行解析,并且您将在脚本所在的每个目录中获得一个日志文件。如果希望所有错误消息都移至同一文件,请使用绝对路径文件。

在此处查看更多信息:http : //www.php.net/manual/zh/ref.errorfunc.php#53025


谢谢,这解决了我的问题。相对定义的行为实在是la脚,日志文件遍布htdocs文件夹,却不知道从哪里开始。我希望与其他设置相对于安装文件夹。+1。
爱德华多

4

NGINX通常将其存储在/var/log/nginx/error.log或access.log中。(无论如何在Ubuntu上)


4
php --info | grep error

这是有帮助的。sjas对问题发表了评论。所以我把它作为答案。


2
(似乎)这将输出PHP命令行设置(例如/etc/php/7.1/cli/php.ini)的值,而不是Apache设置。
BrianHenryIE


2

如果需要,可以在任何位置调用函数调用:error_log($ errorMessageforLog。“ \ n”,4,'somePath / SomeFileName.som');


2

ErrorLog通过cat <file location> | grep ErrorLog在命令行上运行来搜索httpd.conf文件。例如:

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

输出:

# 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"

找到以开头的行,ErrorLog这就是您的答案。

注意:对于虚拟主机,您可以编辑虚拟主机文件httpd-vhosts.conf以指定其他日志文件位置。


2

cPanel错误日志位于:

/ usr / local / cpanel / logs /

/ usr / local / apache / logs /

默认情况下,Apche日志位于以下位置:

/ var / log / apache

要么

/ var / log / apache2

如果有人使用自定义日志位置,则可以通过运行以下命令进行检查:

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

如果遇到错误提示apache2目录不存在,则可以通过以下方式运行此命令以找到正确的位置:

阿帕奇在哪里

要么

apache2在哪里



1

您在共享环境中,找不到错误日志,请始终检查cPanel在cPanel仪表板上是否有选项Errors。如果找不到错误日志,则可以在此处找到它。

在cPanel搜索栏上,搜索错误,它将显示错误页面,这些错误页面基本上是不同的http错误页面的列表,其他错误是显示错误日志的位置。

共享环境上的其他位置:/ home /您的用户名/ logs / home /您的用户名/ public_html / error_log


1

像这样的东西:

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

要么

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

要么

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.