php 线上环境开启日志模块
2017-05-14 本文已影响283人
一只好奇的茂
最近在开发项目中,由于关闭了日志在浏览器显示,线上出现问题后,无法根据日志来进行精细化调试,后来查到可以直接开启日志,实时打印生产环境的日志,方法如下:
修改php.ini
error_reporting = E_ALL ;将会向PHP报告发生的每个错误
display_errors = Off ;不显示满足上条 指令所定义规则的所有错误报告
log_errors = On ;决定日志语句记录的位置
log_errors_max_len = 1024 ;设置每个日志项的最大长度
error_log = /usr/local/error.log ;指定产生的 错误报告写入的日志文件位置
" role="presentation" style="position: relative;">
重新启动Web服务器即可
这样,在执行PHP的任何脚本文件时,所产生的所有错误报告都不会在浏览器中显示,而会记录在自己指定的错误日志/usr/local/error.log中。
注意事项
-
一定要确保将这个文件存放在文档根目录之外,以减少遭到攻击的可能。
-
该文件一定要让PHP脚本的执行用户(Web服务器进程所有者)具有写权限。
-
除了可以记录满足error_reporting所定义规则的所有错误,还可以使用PHP中的error_log()函数,送出一个用户自定义的错误信息。
error_log()的使用
bool error_log ( string message [, int message_type [, string destination [, string extra_headers]]] )
此函数会送出错误信息到Web服务器的错误日志文件、某个TCP服务器或到指定文件中。该函数执行成功则返回TRUE,失败则返回FALSE。第一个参数message 是必选项,即为要送出的错误信息。如果仅使用这一个参数,会按配置文件php.ini中所设置的位置处发送消息。第二个参数message_type为整数值:0表示送到操作系统的日志中;1则使用PHP的Mail()函数,发送信息到某E-mail处,第四个参数extra_headers亦会用到;2则将错误信息送到TCP 服务器中,此时第三个参数destination表示目的地IP及Port;3则将信息存到文件destination中。
如果以登入Oracle数据库出现问题的处理为例,该函数的使用如下所示:
<?php
if(!Ora_Logon($username, $password)){
error_log("Oracle数据库不可用!", 0); //将错误消息写入到操作系统日志中
}
if(!($foo=allocate_new_foo()){
error_log("出现大麻烦了!", 1, ". mydomain.com"); //发送到管理员邮箱中
}
error_log("搞砸了!", 2, "localhost:5000"); //发送到本机对应5000端口的服务器中
error_log("搞砸了!", 3, "/usr/local/errors.log"); //发送到指定的文件中
?>