Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将php错误日志写入包含自定义数据的文件_Php - Fatal编程技术网

将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语句来实现这一点(我已经在我的答案中添加了一条,你可以看到)。