记录php日志
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.ini中display_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日志的更多相关文章
- Appfuse:记录操作日志
appfuse的数据维护操作都发生在***form页面,与之对应的是***FormController,在Controller中处理数据的操作是onSubmit方法,既然所有的操作都通过onSubmi ...
- C# 使用Log4Net记录程序日志
在之前的博客中,写过使用系统内置的Trace类记录程序日志,具体请参考:C# 使用Trace记录程序日志.这篇博客将介绍如何使用Log4Net记录程序日志. 首先需要引用Log4Net.dll,我们可 ...
- PHP 捕捉错误,记录到日志
register_shutdown_function("shutdown"); define('ERR_LOG_FILE', '/dev/shm/php_log.txt'); if ...
- C# 使用Trace记录程序日志
在程序开发中,我们通常需要记录程序运行的状态,在程序部署后,发生的异常可以记录在日志中,便于发现程序潜在的问题.在.NET平台,有很多优秀的日志类库,例如Log4Net.如果程序很小,我们可以自己通过 ...
- MVC 记录操作日志与过滤特殊字符
最近进行的MVC系统需要用到记录操作日志和过滤特殊字符的功能,如果每个action中都调用记录日志的方法就太麻烦了,所以根据需要结合mvc的过滤机制 写了个特殊字符验证与记录操作日志的公用类: pub ...
- DB2不记录事务日志
1. DB2大数据处理不记录事务日志步骤: 建表需要添加属性“NOT LOGGED INITIALLY” 在大批量更改操作的同一个事务开始时执行:“ALTER TABLE tabname ACTI ...
- MVC4.0 利用HandleErrorAttribute和log4net实现记录异常日志功能
1.MVC4.0中HandleErrorAttribte已经帮我们处理了异常问题,当我们新建一个非空的MVC项目时候,在FilterConfig中会发现这样的代码 public class Filte ...
- Nginx正确记录post日志的方法
Nginx正确记录post日志的方法 事实上可以很简单,这取决于把 access_log 放在哪个 location 里面. 一,放到包含fastcgi_pass或proxy_pass的Locatio ...
- 教你50招提升ASP.NET性能(十二):在生产环境,仔细考虑你需要记录哪些日志
(18)When in production, carefully consider what you need to log 招数18: 在生产环境,仔细考虑你需要记录哪些日志 Many peopl ...
随机推荐
- C#中控件数组的讨论
VB用得习惯后,到C#中来觉得很奇怪,如此好的控件数组怎么不见了.“众所周知,控件数组最主要的两个优点:可以循环附值:可以响应同一个事件.从而大大简化了代码.引自http://wenku.baidu. ...
- SQL语句 - 基本查询
select select_list [ into new_table ] from table_source [ where search_condition ] [ group by broup_ ...
- 为Eclipse添加Java和Android SDK源代码
1.添加jdk源码进入eclipse Ctrl + Click -->Attached Source 路径:D:\Program Files\Java\jdk1.8.0_45\src.zip 2 ...
- 在linux下配置静态IP
在终端中输入:vi /etc/sysconfig/network-scripts/ifcfg-eth0 开始编辑,填写ip地址.子网掩码.网关.DNS等.其中“红框内的信息”是必须得有的. 编 ...
- Duilib技巧:背景图片平铺
贴图的描述 方式有两种 // 1.aaa.jpg // 2.file='aaa.jpg' res='' restype='0' dest='0,0,0,0' source='0,0,0,0 ...
- [LeetCode] Additive Number
Af first I read the title as "Addictive Number". Anyway, this problem can be solved elegan ...
- dos下mysql登陆
dos下先进入mysql的bin目录 然后执行:mysql -r root -p123456(注意123456是密码) 进去之后:首先要这样:use test;//代表你目前要使用的是test这个数据 ...
- 用Razor語法寫範本-RazorEngine組件介紹【转——非常好,可以用它来代替NVelocity】
RazorEngine 官網網址:http://razorengine.codeplex.com 在找到RazorEngine之前曾經想過其他的方案,如T4與V8 Engine載jquery.temp ...
- java8 函数式编程
/*** * 测试统计API <br> * 小结:<br> * 1.逻辑代码应用{} 包起来 不写{} 默认 + return <br> * 2.重载方法参数必须加 ...
- Web services 安全 - HTTP Basic Authentication
根据 RFC2617 的规定,HTTP 有两种标准的认证方式,即,BASIC 和 DIGEST.HTTP Basic Authentication 是指客户端必须使用用户名和密码在一个指定的域 (Re ...