将php错误日志写入包含自定义数据的文件
以下代码在给定文件中写入错误将php错误日志写入包含自定义数据的文件,php,Php,以下代码在给定文件中写入错误 ini_set('display_errors', 0); ini_set('log_errors', 1); error_reporting(E_ALL); ini_set('error_log', dirname(__FILE__) . '/error_log.txt'); 但是,我想知道是否有可能记录网页的URL以及错误信息 例如,如果我在www.mywebsite.name/calendar.php?id=5&cat=45上,出现了一些错误,在错误日志中显
ini_set('display_errors', 0);
ini_set('log_errors', 1);
error_reporting(E_ALL);
ini_set('error_log', dirname(__FILE__) . '/error_log.txt');
但是,我想知道是否有可能记录网页的URL以及错误信息
例如,如果我在www.mywebsite.name/calendar.php?id=5&cat=45
上,出现了一些错误,在错误日志中显示为“[22-Jun-2018 05:02:54 Europe/London]php注意:未定义索引:第180行/var/www/mywebsite/calendar.php中的完整日期”
我希望上述URL也出现在日志文件中
我在想,如果我可以创建自己的错误日志编写函数,检查是否有php错误,抓取它,连同其他信息一起编写($\u SERVER['REQUEST\u URI']或其他什么?在代码中的某个地方,您需要调用该函数。这需要从代码中每个请求都会调用的一个点开始,index.php可能就是这个点
$url = $_SERVER['REQUEST_URI']; // get the called uri
error_log($url);
如果只想记录错误时的url,请使用method指定发生错误时将执行的方法,如下所示:
function errorHandler($errno, $errstr, $errfile = null, $errline = null){
$url = $_SERVER['REQUEST_URI']; // get the called uri
error_log($url);
error_log($errno . ' ' . $errstr);
}
set_error_handler("errorHandler");
同样,此代码应该存在于每次请求时调用的脚本中,并且您需要记录发生的所有错误。如果您真的想控制数据的记录方式,您可能需要查看自定义记录函数,甚至是库 最简单的,至少在最基本的层次上,是内置的PHP函数
set\u error\u handler
——这使您能够用自己的函数覆盖PHP的内置记录器,然后您必须从该函数处理对DB或error.log文件的写入
有时,这可能需要大量的手工工作,但如果您需要日志来涵盖许多标准,在这种情况下,我建议另外两种选择:
Monolog是一个免费的库,有助于构建错误日志:
设置起来有点复杂,但如果你真的感兴趣,一定要仔细研究一下,这主要是一项付费服务,但一旦你设置好了,它就会非常漂亮
根据我在下面评论中的留言编辑:
您还可以在try/catch语句中烘焙,这是一个非常好的开始实践,包括在编写PHP的方式中,它可以确保以特定的方式处理和记录可能出现的错误:
例如:
<?php
//create function with an exception
function checkNum($number) {
if($number>1) {
throw new Exception("Value must be 1 or below");
}
return true;
}
//trigger exception in a "try" block
try {
checkNum(2);
//If the exception is thrown, this text will not be shown
echo 'If you see this, the number is 1 or below';
}
//catch exception
catch(Exception $e) {
echo 'Message: ' .$e->getMessage();
}
?>
关于try/catch和异常的进一步阅读:
我相信这将写入所有URL?我只想在任何脚本中的某个地方出现错误时才这样写?我也想记录错误消息本身,因为我知道在哪个文件中发生了什么错误,错误是什么URL@NoNice是的,你说得对,要做到这一点,您只需要将error参数添加到回调函数中,然后使用error_log函数记录错误。是否有php函数可以提供脚本中某个地方是否存在错误的信息?有点像,但我认为这不是您现在想要的。从目前为止我能告诉你的,我最好的建议是从一开始就尝试用内置的错误和日志开始编码,你可以用try/catch语句来实现这一点(我已经在我的答案中添加了一条,你可以看到)。