如何更改PHP在错误日志文件中写入错误的方式?
问题描述:
我一直在我的网站上工作了一年多了,我非常渴望终于把它推出去供人们使用。然而,它已经变得相当大 - 我几乎想要脱离我的控制 - 而且,我真的只是一个自学成才的业余程序员。如何更改PHP在错误日志文件中写入错误的方式?
所以我想确保php生成的任何错误都记录在文件中,因此我可以访问此文件并跟踪错误。
目前我的设置如下:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', 1);
ini_set('error_log', 'errors.log');
?>
作品不错,到目前为止,我的error.log文件将包含这样的东西:
[14日,2013 00:16 :26] PHP注意:未定义的变量:在/home/www/dir/index.php在第14行中的非实际变量[14-May-2013 00:16:28] PHP注意:未定义变量:/ home/www/dir中的非实例变量/index.php on line 14
好,记录错误。
但现在我有一个问题:
他们都在同一行,没有休息。使其难以阅读。我如何在一个新行中得到每个错误?
我看到有一个时间戳。真棒!我怎样才能添加用户的IP地址或任何其他自定义的东西?
同样,我的问题:
如何更改PHP在错误日志文件中写入错误的方式? 特别是,如何在记录每个错误之后创建一个新行,以便error.log文件更易于阅读。我如何添加自定义数据和值,如IP地址?
答: 我结束了做以下 - 这似乎在一定程度上重现了什么PHP是通过标准做的和可以从那里进行修改。
<?php
function my_error_handler($type, $message, $file, $line, $vars)
{
switch($type)
{
case 1: // 1 //
$type_str = 'ERROR';
break;
case 2: // 2 //
$type_str = 'WARNING';
break;
case 4: // 4 //
$type_str = 'PARSE';
break;
case 8: // 8 //
$type_str = 'NOTICE';
break;
case 16: // 16 //
$type_str = 'CORE_ERROR';
break;
case 32: // 32 //
$type_str = 'CORE_WARNING';
break;
case 64: // 64 //
$type_str = 'COMPILE_ERROR';
break;
case 128: // 128 //
$type_str = 'COMPILE_WARNING';
break;
case 256: // 256 //
$type_str = 'USER_ERROR';
break;
case 512: // 512 //
$type_str = 'USER_WARNING';
break;
case 1024: // 1024 //
$type_str = 'USER_NOTICE';
break;
case 2048: // 2048 //
$type_str = 'STRICT';
break;
case 4096: // 4096 //
$type_str = 'RECOVERABLE_ERROR';
break;
case 8192: // 8192 //
$type_str = 'DEPRECATED';
break;
case 16384: // 16384 //
$type_str = 'USER_DEPRECATED';
break;
}
$errormessage = '[ '.date(r).' ] '.$type_str.': '.$message.' in '.$file.' on line '.$line."\n";
// for development simply ECHO $errormessage;
$file = 'my_errors.log';
file_put_contents($file, $errormessage, FILE_APPEND);
}
error_reporting(E_ALL);
ini_set('display_errors', '0');
set_error_handler('my_error_handler');
?>
答
你不能做任何额外的定制或实施任何与内置的错误处理程序逻辑的,你需要与set_error_handler()
设置自己的错误处理。
该函数需要一个回调,当PHP遇到错误时将调用该回调,并且您可以相应地采取行动。
请参阅文档中有关如何使用此函数以及如何实现适当回调的示例。
这也是在这个线程讨论http://stackoverflow.com/questions/30630484/is-it-possible-to-change-php-error-log-output – Salagir 2017-02-22 10:03:39
这也在http:// stackoverflow中讨论.com/questions/30630484/is-it-possible-to-change-php-error-log-output – Salagir 2017-02-22 10:05:46
这也在http:// stackoverflow上讨论。com/questions/30630484/is-it-it-it-change-php-error-log-output – Salagir 2017-02-22 10:06:48