以下代码在给定文件中写入错误。
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
上,并且在error_log.txt中显示为"[22-Jun-2018 05:02:54 Europe/London] PHP Notice: Undefined index: full_date in /var/www/mywebsite/calendar.php on line 180"
时出现了一些错误,我也希望上述URL也位于日志文件中。
我在考虑是否可以创建自己的错误日志编写功能,该功能可以检查是否存在php错误,抓取该错误并将其与其他信息($ _SERVER ['REQUEST_URI']或其他信息)一起写入?? >
答案 0 :(得分:1)
如果您真的想控制数据的记录方式,那么您将希望查看自定义的日志记录功能,甚至是库。
最简单(至少在最基本的层次上)是内置的PHP函数set_error_handler
-这使您可以使用自己的功能覆盖PHP的内置记录器,然后从该函数必须处理写入数据库或error.log文件的过程。
有时候,这可能需要大量的人工操作,但是如果您需要日志来涵盖很多标准,在这种情况下,我建议另外两个选择:
Monolog是一个免费的库,可帮助您构建错误日志: https://seldaek.github.io/monolog/
设置起来有点复杂,但是如果您真的很感兴趣,可以肯定地去看看Loggly,它主要是一种付费服务,但是一旦设置完成,它就会记录错误的信息。< / p> 根据我在以下评论中的消息进行
编辑: 您也可以烘焙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和异常的更多信息: https://www.w3schools.com/php/php_exception.asp
答案 1 :(得分:0)
在代码中的某些地方,您将需要调用error_log函数。这需要从代码中针对每个请求调用的一点(index.php)开始。
$url = $_SERVER['REQUEST_URI']; // get the called uri
error_log($url);
如果您只想记录错误时的网址,请使用set_error_handler方法来指定发生错误时将要执行的方法,如下所示:
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");
再次,此代码应存在于每次请求调用的脚本上,您将需要记录所有发生的错误。