在一些公司里面,有专门的日志收集系统,日志收集系统会在背后默默的帮你收集错误、警告、提示。
也有些公司没有专门的日志收集系统,通过文件来记录服务器当中的运行日志。
其中:PHP的错误,警告这些是必须要收集的。
那么问题来了,不让用户看到,设置好错误报告级别,如何讲错误收集到日志系统中呢?
这里需要使用到php.ini的相关配置项,这两个配置项为:
参数 | 配置项 | 说明 |
---|---|---|
log_errors | On/off | 是否开启日志记录 |
log_errors_max_len | 整型,默认1024 | 单行错误最大记录长度 |
error_log | syslog或者指定路径 | 错误日志记录在什么地方 |
说明:
- 在表格中的
log_errors
和log_errors_max_len
非常好理解。 - 而
error_log
指定讲错误存放在什么路径上,配置项中的syslog可能有点不太好理解。syslog是指系统来记录。windows系统在电脑的日志收集里面,linux默认在:/etc/syslog.conf
【扩展】若Linux系统启动或修改了日志收集,可能存储在第三方专用的日志收集服务器中。
此外,PHP还为我们专门准备了一个自定义的错误日志函数:
bool error_log (string $错误信息[int $错误消息类型 = 0 [string $存储目标]])
这个函数可以把错误信息发送到web服务器的错误日志,或者到一个文件里。
常用的错误消息类型:
类型 | 说明 |
---|---|
0 | 发送至默认的error_log 指定位置 |
1 | 发送到指定的邮件位置(不熟悉可以不用看) |
3 | 发送到指定的文件位置 |
--------------------
补充部分:
--------------------
看到有说:
nginx只对页面的访问做access记录日志。不会有php的error log 信息。nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不到php的errorlog。
原因是php-fpm的配置文件php-fpm.conf中默认是关闭worker进程的错误输出,直接把他们重定向到/dev/null,所以我们在nginx的error log 和php-fpm的errorlog都看不到php的错误日志。
所以我们要进行如下的设置就能查看到nginx下php-fpm不记录php错误日志的方法
修改 php-fpm.conf 文件,添加(或修改)如下配置:
[global]
error_log = log/error_log
[www]
catch_workers_output = yes
修改 php.ini 文件,添加(或修改)如下配置:
log_errors = On
error_log = "/usr/local/lnmp/php/var/log/error_log"
error_reporting=E_ALL&~E_NOTICE
----------------------------------------
个人测试后发现:
-----------------------------------------
根据个人的测试,发现,php-fpm中的www.conf文件中的:
[www] catch_workers_output = yes
设置yes或者on 没有起任何作用
对于nginx 和php-fpm 和php三者来说:
php.ini中设置了error_log的保存路径后,如果这里设置的路径为无效(自带的 error_log =syslog 测试后是无效的路径,如果设置了如 error_log = /var/log/php.error.log 这样的路径,请保证这个文件确实存在并且有写入权限,否则仍然是无效的路径,php进程不会自动创建这个文件的),
那么错误就会被打印到nginx的 error_log所指向的路径中!如果设置的路径有效,则打印到这里设置的地方!
php-fpm在记录错误的这个环节并没有启动任何作用!