1、记录PHP错误日志

display_errors与log_errors的区别

display_errors

错误回显,一般常用于开发模式,但是很多应用在正式环境中也忘记了关闭此选项。错误回显可以暴露出非常多的敏感信息,为攻击者下一步攻击提供便利。推荐关闭此选项。

display_errors = On

开启状态下,若出现错误,则报错,出现错误提示

dispaly_errors = Off

关闭状态下,若出现错误,则提示:服务器错误。但是不会出现错误提示



log_errors

在正式环境下用这个就行了,把错误信息记录在日志里。正好可以关闭错误回显。

对于PHP开发人员来说,一旦某个产品投入使用,那么第一件事就是应该将display_errors选项关闭,以免因为这些错误所透露的路径、数据库连接、数据表等信息而遭到黑客攻击。



某个产品投入使用后,难免会有错误信息,那么如何记录这些对开发人员非常有用的信息呢?

将PHP的log_errors开启即可,默认是记录到WEB服务器的日志文件里,比如Apache的error.log文件。当然也可以记录错误日志到指定的文件中。

# vim /etc/php.ini

display_errors = Off

log_errors = On

error_log = /var/log/php_error/php-error.log

另外也可以设定error_log = syslog,使这些错误信息记录到操作系统的日志里。

error_reporting 设定错误讯息回报的等级

E_ALL能从不良编码实践到无害提示到出错的所有信息。E_ALL 对于开发过程来说有点太细,因为它在屏幕上为一些小事(例如变量未初始化)也显示提示,会搞糟浏览器的输出

最好把默认值改为:error_reporting =
E_ALL & ~E_NOTICE

默认值是:E_ALL & ~E_DEPRECATED & ~E_STRICT

PHP.inidisplay_errors = Off失效的解决

问题:

PHP设置文件php.ini中明明已经设置display_errors = Off,但是在运行过程中,网页上还是会出现错误信息。

解决:

经查log_errors= On,据官方的说法,当这个log_errors设置为On,那么必须指定error_log文件,如果没指定或者指定的文件没有权限写入,那么照样会输出到正常的输出渠道,那么也就使得display_errors 这个指定的Off失效,错误信息还是打印了出来。于是将log_errors = Off,问题就解决了。

2、实现Nginx中使用PHP-FPM时记录PHP错误日志的配置方法

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错误日志的方法:

1,修改php-fpm.conf中的配置,如果没有请增加:

[global]

error_log = /var/log/php_error/php-fpm.log

[www]

catch_workers_output = yes

2.修改php.ini中配置,没有则增加:

display_errors = Off

log_errors = On

error_log = /var/log/php_error/php-error.log

error_reporting=E_ALL&~E_NOTICE

3.重启php-fpm

当PHP执行错误时就能看到错误日志在”
/var/log/php_error/php-fpm.log”中了

3、nginx php-fpm中启用慢日志配置(用于检测执行较慢的PHP脚本)

转到nginx+php-fpm后,饱受500,502问题困扰。当nginx收到如上错误码时,可以确定后端php-fpm解析php出了某种问题,比如,执行错误,执行超时。

php-fpm.conf的配置文件中有一个参数request_slowlog_timeout是这样描述的

当request_slowlog_timeout 设为一个具体秒时request_slowlog_timeout
=5,表示如果哪个脚本执行时间大于5秒,会记录这个脚本到慢日志文件中

request_slowlog_timeout =0表示关闭慢日志输出。

慢日志文件位置默认在php的安装目录下的log文件夹中,可以通过修改slowlog = log/$pool.log.slow参数来指定。

php-fpm慢日志的例子,慢日志会记录下进程号,脚本名称,具体哪个文件哪行代码的哪个函数执行时间过长。

request_slowlog_timeout 和 slowlog需要同时设置,开启request_slowlog_timeout的同时需要开启
slowlog

慢日志路径需要手动创建

具体开启php-fpm慢日志步骤:

vi etc/php-fpm.conf

去掉request_slowlog_timeout 、slowlog的前缀分号';',设置request_slowlog_timeout =5;

:wq

保存退出

创建慢日志目录

mkdir log

重启php-fpm

kill -INT `cat var/run/php-fpm.pid

sbin/php-fpm

4、所有具体步骤

1、vi php.ini

dispaly_errors = Off

log_errors = On

error_log = /var/log/php_error/php-error.log

error_reporting = E_ALL & ~E_DEPRECATED
& ~E_STRICT

2、vi php-fpm.conf

[global]

error_log = /var/log/php_error/php-fpm.log

[www]

catch_workers_output = yes

request_slowlog_timeout = 5

slowlog = /var/log/php_error/slow.log

3、mkdir /var/log/php_error

chown www:www /var/log/php_error

4、先检测,若无报错,则执行重载:/usr/local/php/sbin/php-fpm –t

重载:service php-fpm reload

5、查看/var/log/php_error文件夹下是否有相应的日志文件生成

6、日志轮询 vi
/etc/logrotate.d/nginx

把日志路径添加上即可: /var/log/php_error/*.log

注:6具体参考:使用Linux自带的命令logrotate对Nginx日志进行切割

http://www.cnblogs.com/sanduzxcvbnm/p/6077247.html

记录php日志的更多相关文章

  1. Appfuse:记录操作日志

    appfuse的数据维护操作都发生在***form页面,与之对应的是***FormController,在Controller中处理数据的操作是onSubmit方法,既然所有的操作都通过onSubmi ...

  2. C# 使用Log4Net记录程序日志

    在之前的博客中,写过使用系统内置的Trace类记录程序日志,具体请参考:C# 使用Trace记录程序日志.这篇博客将介绍如何使用Log4Net记录程序日志. 首先需要引用Log4Net.dll,我们可 ...

  3. PHP 捕捉错误,记录到日志

    register_shutdown_function("shutdown"); define('ERR_LOG_FILE', '/dev/shm/php_log.txt'); if ...

  4. C# 使用Trace记录程序日志

    在程序开发中,我们通常需要记录程序运行的状态,在程序部署后,发生的异常可以记录在日志中,便于发现程序潜在的问题.在.NET平台,有很多优秀的日志类库,例如Log4Net.如果程序很小,我们可以自己通过 ...

  5. MVC 记录操作日志与过滤特殊字符

    最近进行的MVC系统需要用到记录操作日志和过滤特殊字符的功能,如果每个action中都调用记录日志的方法就太麻烦了,所以根据需要结合mvc的过滤机制 写了个特殊字符验证与记录操作日志的公用类: pub ...

  6. DB2不记录事务日志

    1. DB2大数据处理不记录事务日志步骤:  建表需要添加属性“NOT LOGGED INITIALLY”  在大批量更改操作的同一个事务开始时执行:“ALTER TABLE tabname ACTI ...

  7. MVC4.0 利用HandleErrorAttribute和log4net实现记录异常日志功能

    1.MVC4.0中HandleErrorAttribte已经帮我们处理了异常问题,当我们新建一个非空的MVC项目时候,在FilterConfig中会发现这样的代码 public class Filte ...

  8. Nginx正确记录post日志的方法

    Nginx正确记录post日志的方法 事实上可以很简单,这取决于把 access_log 放在哪个 location 里面. 一,放到包含fastcgi_pass或proxy_pass的Locatio ...

  9. 教你50招提升ASP.NET性能(十二):在生产环境,仔细考虑你需要记录哪些日志

    (18)When in production, carefully consider what you need to log 招数18: 在生产环境,仔细考虑你需要记录哪些日志 Many peopl ...

随机推荐

  1. 向上下左右不间断无缝滚动图片的效果(兼容火狐和IE)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. EDM备忘录:触发式邮件订阅和退订功能介绍

    一般来说,有触发式邮件订阅和退订功能是邮件模板设计中必不可少的两项功能,下面博主为大家介绍一下. 若客户在订阅后不想再收到这类邮件即可选择退订,将不再收到该IP地址的推广邮件,避免客户在继续收到这类邮 ...

  3. 【cs229-Lecture19】微分动态规划

    内容: 调试强化学习算法(RL算法) LQR线性二次型调节(french动态规划算法) 滤波(kalman filters) 线性二次高斯控制(LGG) Kalman滤波器 卡尔曼滤波(Kalman ...

  4. SNF开发平台WinForm之六-上传下载组件使用-SNF快速开发平台3.3-Spring.Net.Framework

    6.1运行效果: 6.2开发实现: 1.先在要使用的项目进行引用,SNF.WinForm.Attachments.dll文件. 2.在工具箱内新建选项卡->选择项,浏览找到文件SNF.WinFo ...

  5. 使用JavaScript判断用户是否为手机设备

    最近在做微信服务号开发,其中遇到一个问题是微信服务号查看的个人的消息,如果点击在浏览器中查看(iOS中是在Safari中打开)应该是跳转到登录页面,因为页面需要从后台获取,因为需要服务端判断,如果是存 ...

  6. 《javascript模式》 容易踩中的那些坑

    1 链式赋值的陷阱 1: function func(){ 2: var innerVar = globalVar = 20; 3: } 4: func(); 5: console.log(typeo ...

  7. 通过python切换hosts文件

    做开发或测试时常需要切换hosts ,如果hosts比较多,那么频繁的打开hosts文件对地址加注释(#),再把去掉注释是个繁琐的事情. 当然,SwitchHosts 已经可以帮我们方便的解决了这个繁 ...

  8. iOS-项目搭建

    一.目的:一个小的项目当然不需要这么费劲的搞,到时一个大的项目要是不好好设计一下的话,写到后面就不知道怎么分类或者命名了,搞的项目很乱.为了更好的对本项目的查看,修改和后期的维护.一个好的项目的搭建不 ...

  9. 终极事务处理(XTP,Hekaton)——万能大招?

    在SQL Server 2014里,微软引入了终极事务处理(Extreme Transaction Processing),即大家熟知的Hekaton.我在网上围观了一些文档,写这篇文章,希望可以让大 ...

  10. JS魔法堂:属性、特性,傻傻分不清楚

    一.前言 或许你和我一样都曾经被下面的代码所困扰 var el = document.getElementById('dummy'); el.hello = "test"; con ...