记录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.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

时间: 2024-08-29 16:43:14

记录php日志的相关文章

Nginx 指定不产生日志类型(不记录图片日志)

在主配置文件中已经定义了配置文件的格式 [[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf  # nginx 中的配置修改 日志命名格式 log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]' '$host "$request_uri" $status' '"$http_referer" "

Tomcat会话超时时怎样记录操作日志,满足安全审计要求

众所周知.在实际的Web应用程序中,会话管理一般都採用Web容器会话管理功能. 使用Tomcat做Webserver也是如此,并且从安全的角度考虑,尽量避免去更改和干预Web容器的会话管理功能. Tomcat会话管理功能肯定比我们自己做出来要全面和可靠,况且Tomcat是主流开源社区维护的.有专门的团队来开发和维护.一旦爆出安全漏洞,也能非常快被修复. 在实际开发中,为了满足安全审计的要求.Web应用程序一旦有会话注销.就应该记录操作日志.注销一般分为操作者主动注销.应用程序检測到异常攻击主动注

Nginx日志过滤 使用ngx_log_if不记录特定日志

ngx_log_if是Nginx的一个第三方模块.它在Github上的描述是这样介绍的:ngx_log_if是一个独立的模块,允许您控制不要写的访问日志,类似于Apache的"CustomLog env = XXX" 第一步: 先到Github下载ngx_log_if地址https://github.com/cfsego/ngx_log_if/ 第二步: 安装第三方模块到Nginx.第三方模块的安装可以参考http://wiki.nginx.org/3rdPartyModules 使用

C# 使用Trace记录程序日志

在程序开发中,我们通常需要记录程序运行的状态,在程序部署后,发生的异常可以记录在日志中,便于发现程序潜在的问题.在.NET平台,有很多优秀的日志类库,例如Log4Net.如果程序很小,我们可以自己通过C#的Trace类来实现一个基本的日志记录功能.下面直接看代码: public class TraceHelper { private static TraceHelper _traceHelper; private TraceHelper() { } public static TraceHelp

阿里云X-Forwarded-For 发现tomcat记录的日志全部来自于SLB转发的IP地址,不能获取到请求的真实IP。

1.背景:阿里云的SLB的负载均衡,在tomcat中获取不到真实IP,而是阿里的内网IP,SLB中俩台或者3台本身是局域网,这里是SLB原理,可以看看,没怎么看懂,呵呵,要细细读下. 2.需要开启tomcat的X-Forwarded-For,在tomcat/conf/server.xml中有一个如下的AccessLogValve 日志纪录功能,当配置中的pattern=common时,对应的日志是如下,无论正常请求和非法请求都会记录. <Valve className="org.apach

Apache不指定记录文件日志

编辑虚拟主机配置文件 在Errorlog和Customlog中间加入不指定记录文件日志的格式, 如下所示: ErrorLog "lam.com-error_log" SetEnvIf Resquest_URI ".*\.gif$" image-request SetEnvIf Resquest_URI ".*\.jpg$" image-request SetEnvIf Resquest_URI ".*\.png$" image

FIREDAC记录SQL日志

跟踪SQL日志可以方便开发的时候的程序调试.SQL日志记录会耗费服务费资源,正式部署中间件的时候,建议关闭SQL日志记录. FIREDAC通过使用TFDMoniFlatFileClientLink控件来记录SQL日志的. 首先 USES FireDAC.Moni.FlatFile,然后拖放TFDMoniFlatFileClientLink控件. TFDMoniFlatFileClientLink控件的主要属性: 设置SQL日志保存的目录和文件名: FDMoniFlatFileClientLink

让从库记录 binlog 日志

一.什么情况下从库需要记录 binlog 日志 (1) 在主从复制的级联架构下,从库既充当主库又充当从库(2) 在从库做数据库备份,数据库备份必须要有全备和 binlog 日志,才是完整的备份 二.如何让从库记录 binlog 日志 # 加入这些参数并重启服务 log-slave-updates log-bin = /data/3307/mysql-bin expire_logs_days = 7

C# 使用Log4Net记录程序日志

在之前的博客中,写过使用系统内置的Trace类记录程序日志,具体请参考:C# 使用Trace记录程序日志.这篇博客将介绍如何使用Log4Net记录程序日志. 首先需要引用Log4Net.dll,我们可以使用Visual Studio的NuGet来引入,也可以从官网上面下载.下面是一个简单的LogHelper类, using log4net; [assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace CommonLibra

asp.net MVC自定义错误页,并记录错误日志

只需要在Global.asax文件中添加以下代码,则可以在出错后友好的展示错误页,也不需要在很多地方写记录错误日志的代码 protected void Application_Error(object sender, EventArgs e) { if (HttpContext.Current.IsCustomErrorEnabled) { return; } var exception = Server.GetLastError(); var httpException = new HttpE