您的位置:首页 > 运维架构 > Nginx

解决:LNMP架构下nginx的error_log日志过大问题

2013-08-10 17:43 1256 查看
php-fpm.conf 中的
catch_workers_output = yes
设置可以捕获 php 程序的错误输出

我在部署LNMP架构时都是设置此项为yes,便于日志分析
如果此项设置为 yes ,同时
error_reporting = E_ALL
的话,那么nginx的错误日志会记录大量记录,内容如下:
2013/08/09 14:38:14 [error] 6687#0: *33365028 FastCGI sent in stderr: "PHP Notice:  Undefined variable: xxxx in /data/www/www/controllers/main.php on line 50
PHP Notice:  Undefined variable: xxxx in /data/www/www/controllers/main.php on line 55
PHP Notice:  Undefined index:  sid in /data/www/www/controllers/main.php on line 88


当然了,这是在php代码写的不够严谨的情况下,如:
1、直接使用
$sid = $_GET['sid'];
而未做 isset 判断

2、使用未定义变量
print $username;
像这样的 E_NOTICE 类错误都会记录到nginx错误日志,日志大小增长迅速

比较好的解决方法是开发严谨的程序
其次就是调整错误报告的级别,如去掉 E_NOTICE 类的错误
可以在 php.ini 中设置,如:
error_reporting = E_ALL & ~E_NOTICE
即可,

配置文件中不支持
error_reporting = E_ALL ^ E_NOTICE
这种写法,但是在php程序中可以这么使用

其实即使在配置文件中设置了
error_reporting = E_ALL & ~E_NOTICE
如果同时在程序中设置,如:

error_reporting(E_ALL);
那么会以在程序中设置的为准,所以日志还是会记录 Notice 错误的
本文出自 “好运” 博客,请务必保留此出处http://haoyun.blog.51cto.com/2038762/1269410
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: