首页 > 后端开发 > 正文

如何记录PHP错误日志

2024-07-21 08:47:59 | 我爱编程网

最近经常有小伙伴私信询问如何记录PHP错误日志相关的问题,今天,我爱编程网小编整理了以下内容,希望可以对大家有所帮助。

本文目录一览:

如何记录PHP错误日志

如何记录PHP错误日志


记录PHP错误日志的方法:首先设置PHP的配置文件;然后将使用指定的文件记录错误报告日志;最后错误信息记录到操作系统的日志里。
记录PHP错误日志的方法:
1、使用指定的文件记录错误报告日志
如果使用自己指定的文件记录错误日志,一定要确保将这个文件存放在文档根目录之外,以减少遭到攻击的可能。

并且该文件一定要让PHP脚本的执行用户 (Web服务器进程所有者)具有写权限。假设在Linux操作系统中,将/usr/local/目录下的error.log文件作为错误日志文件,并设置 Web服务器进程用户具有写的权限。然后在PHP的配置文件中,将error_log指令的值设置为这个错误日志文件的绝对路径。
相关学习推荐:php编程(视频)

需要将php.ini中的配置指令做如下修改:
error_reporting = E_ALL ;将会向PHP报告发生的每个错误
display_errors = Off ;不显示满足上条 指令所定义规则的所有错误报告
log_errors = On ;决定日志语句记录的位置
log_errors_max_len = 1024 ;设置每个日志项的最大长度

error_log = /usr/local/error.log ;指定产生的 错误报告写入的日志文件位置

PHP 的配置文件按上面的方式设置完成以后,并重新启动Web服务器。这样,在执行PHP的任何脚本文件时,所产生的所有错误报告都不会在浏览器中显示,而会记 录在自己指定的错误日志/usr/local/error.log中。此外,不仅可以记录满足error_reporting所定义规则的所有错误,而且 还可以使用PHP中的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"); //发送到指定的文件中
?>2、 错误信息记录到操作系统的日志里
错误报告也可以被记录到操作系统日志里,但不同的操作系统之间的日志管理有点区别。在Linux上错误语句将送往syslog,而在Windows上错误 将发送到事件日志里。如果你不熟悉syslog,起码要知道它是基于UNIX的日志工具,它提供了一个API来记录与系统和应用程序执行有关的消息。 Windows事件日志实际上与UNIX的syslog相同,这些日志通常可以通过事件查看器来查看。如果希望将错误报告写到操作系统的日志里,可以在配 置文件中将error_log指令的值设置为syslog。

具体需要在php.ini中修改的配置指令如下所示:
error_reporting = E_ALL ;将会向PHP报告发生的每个错误
display_errors = Off ;不显示 满足上条指令所定义规则的所有错误报告
log_errors = On ;决定日志语句记录的位置
log_errors_max_len = 1024 ;设置每个日志项的最大长度
error_log = syslog ;指定产生的错误报告写入操作系统的日志里
除了一般的错误输出之外,PHP还允许向系统syslog中发送定制的消息。虽然通过前面介绍的error_log()函数,也可以向syslog中发送定制的消息,但在PHP中为这个特性提供了需要一起使用的4个专用函数。
分别介绍如下:
define_syslog_variables()
在使用openlog()、syslog及closelog()三个函数之前必须先调用该函数。因为在调用该函数时,它会根据现在的系统环境为下面三个函数初使用化一些必需的常量。
openlog()
打开一个和当前系统中日志器的连接,为向系统插入日志消息做好准备。并将提供的第一个字符串参数插入到每个日志消息中,该函数还需要指定两个将在日志上下文使用的参数,可以参考官方文档使用。
syslog()
该 函数向系统日志中发送一个定制消息。需要两个必选参数,第一个参数通过指定一个常量定制消息的优先级。例如LOG_WARNING表示一般的警 告,LOG_EMERG表示严重地可以预示着系统崩溃的问题,一些其他的表示严重程度的常量可以参考官方文档使用。第二个参数则是向系统日志中发送的定制 消息,需要提供一个消息字符串,也可以是PHP引擎在运行时提供的错误字符串。
closelog()
该函数在向系统日志中发送完成定制消息以后调用,关闭由openlog()函数打开的日志连接。
如果在配置文件中,已经开启向syslog发送定制消息的指令,就可以使用前面介绍的四个函数发送一个警告消息到系统日志中,并通过系统中的syslog解析工具,查看和分析由PHP程序发送的定制消息,如下所示:
define_syslog_variables();
openlog("PHP5", LOG_PID , LOG_USER);
syslog(LOG_WARNING, "警告报告向syslog中发送的演示, 警告时间:".date("Y/m/d H:i:s"));
closelog();
?>相关学习推荐:编程视频

如何记录PHP错误日志

php该在哪里写日志?怎么写日志?日志是做什么用的?

所谓的日志就是记录系统运行状态的数据。
一般是将信息记录到文本文件或数据库中。
比如:
<?php
function writeLog($msg){
$logFile = date('Y-m-d').'.txt';
$msg = date('Y-m-d H:i:s').' >>> '.$msg."\r\n";
file_put_contents($logFile,$msg,FILE_APPEND );
}

//调用上面的函数,写一条信息进日志文件
writeLog('这是测试日志信息');
?>

如何记录PHP错误日志我爱编程网

php实现日志管理(记录用户操作)原理

我爱编程网(https://www.52biancheng.com)小编还为大家带来php实现日志管理(记录用户操作)原理的相关内容。

把日志需要保留的数据用json串或xml等数据结构的方式存储起来,调用的时候直接解析这些数据结构即可。
按简单的理解,给各模块的关键步骤起个操作名字,记录一下该操作名,时间,用户,IP等就完了。
单入口模式,这样只需要往index.php加入write_log功能就好了。
至于哪个字段,原值,新值,这个没什么好方法啊,可以引入插件机制,
开个类存储插件方法,命名以module_task为准,比如以上的url就是article_update
那么这个插件类就是
class plugin
{
public $extraLog;
function article_update($field,$old,$new)
{
self::$extraLog = array('字段'=>$field,'原值'=>$old,'新值'=>$new);
}
}
这个方法在流程页面进行数据库操作的地方调用,index.php的write_log流程只读plubin::$extraLog,循环然后和其它信息一起入库或文件。

以上就是我爱编程网小编整理的内容,想要了解更多相关资讯内容敬请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“如何记录PHP错误日志”相关推荐
java开发怎么做日志功能 就是记录用户每一步的操作具体做什么了
java开发怎么做日志功能 就是记录用户每一步的操作具体做什么了

java开发怎么做日志功能就是记录用户每一步的操作具体做什么了Java开发做日志功能是比较麻烦的,Java开发学做日志功能推荐千锋教育。千锋教育合作院校超600所,校企合作共建实验室50余个,与教育部产学合作协同育人项目累计成功立项768项,为高校举办实训近万次,组织实施各类讲座5万余场。规划教材100本,已被近500所高校选用授课教材,深受广大高校师生喜爱。日志对于一个系统来说非常重

2024-06-13 02:54:00
java如何记录方法运行时间
java如何记录方法运行时间

java获取运行时间很多朋友都想知道java怎么获取运行时间?下面就一起来了解一下吧~第一种是以毫秒为单位计算的。//伪代码long startTime=System.currentTimeMillis(); //获取开始时间doSomeThing(); //测试的代码段long endTime=System.currentTimeMillis(); //获取结束时间System.

2024-04-07 09:34:38
PHP报错syntax error, unexpected '(' 是什么错误啊
PHP报错syntax error, unexpected '(' 是什么错误啊

请教php大神:关于php的错误处理函数?&lt;?php//关闭错误报告error_reporting(0);//报告runtime错误error_reporting(E_ERROR|E_WARNING|E_PARSE);//报告所有错误error_reporting(E_ALL);//等同error_reporting(E_ALL);ini_set("error_re

2024-07-20 10:04:20
tomcat7怎么输出java异常日志
tomcat7怎么输出java异常日志

java运行报异常这个问题是由较高版本的JDK编译的javaclass文件试图在较低版本的JVM上运行产生的错误。1、解决措施就是保证jvm(java命令)和jdk(javac命令)版本一致。如果是linux版本,则在命令行中分别输入java-version和javac-version命令来查看版本是否一致。这里假设都是1.7版本。2、如果都一致,但还是解决不了问题,那么你肯定

2024-04-18 20:58:34
java程序如何跳过错误继续执行
java程序如何跳过错误继续执行

java程序如何跳过错误继续执行错误(Error)是跳不过的,程序不能运行。如果是异常(Exception)可以在方法后面用throws抛出,如voidfun()throwsExceptin{}也可以用try{}catch(Exceptione){}处理;java运行到某处时,需要用户确定程序是否继续,用什么方法booleanflag=true;while(flag){

2024-05-24 19:20:05
java报错null是什么错误
java报错null是什么错误

java字符串录入数组后显示null?原因在于你最后for循环输出中i&lt;length里的length取值有问题。你这段程序中,length取的是文件的大小,longlength=file.length()返回的是当前文件的所有字符的数量。假如你的文件里的内容是:第一行:a第二行:bc那么此时file.length()是多少呢?其实它是'a'、'\n'、'b'、'

2024-06-25 01:27:46
java编译错误怎么办
java编译错误怎么办

java不能编译SDK平台提供的Java编译器(javac.exe)和Java解释器(java.exe)位于Java安装目录的bin文件夹中,为了能在任何目录中使用编译器和解释器,应在系统特性中设置Path。对于Windows2000、Windows2003、WindowsXP,用鼠标右键点击“我的电脑”,弹出菜单,然后选择属性,弹出“系统特性”对话框,再单击该对话框中的高级选项,然后点击按

2024-05-07 00:44:35
Python如何打开记事本
Python如何打开记事本

Python如何打开记事本先建立上图中的三个主模块,同时,在模块中建立各个模块的功能。先以文件为例:下设功能:新建、打开、保存和另存为,代码如下:#-*-encoding:utf8fromTkinterimport*root=Tk()root.title('BenbenNode')#createmenumenubar=Menu(root)roo

2024-01-08 12:25:02