将php错误日志写入具有自定义数据的文件

时间:2018-06-22 12:51:08

标签: 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上,并且在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']或其他信息)一起写入??

2 个答案:

答案 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");

再次,此代码应存在于每次请求调用的脚本上,您将需要记录所有发生的错误。