我如何打开所有错误和警告,并将它们记录到一个文件,但要在脚本中设置所有这些(不改变php.ini中的任何内容)?
我想定义一个文件名,以便将所有错误和警告都记录到其中。
我如何打开所有错误和警告,并将它们记录到一个文件,但要在脚本中设置所有这些(不改变php.ini中的任何内容)?
我想定义一个文件名,以便将所有错误和警告都记录到其中。
当前回答
简单地把这些代码放在PHP/index文件的顶部:
error_reporting(E_ALL); // Error/Exception engine, always use E_ALL
ini_set('ignore_repeated_errors', TRUE); // always use TRUE
ini_set('display_errors', FALSE); // Error/Exception display, use FALSE only in production environment or real server. Use TRUE in development environment
ini_set('log_errors', TRUE); // Error/Exception file logging engine.
ini_set('error_log', 'your/path/to/errors.log'); // Logging file path
其他回答
此外,你需要“AllowOverride Options”指令来实现这个功能。(Apache 2.2.15)
在.htaccess文件中添加以下代码(作为php.ini文件或ini_set函数的替代):
<IfModule mod_php5.c>
php_flag log_errors on
php_value error_log ./path_to_MY_PHP_ERRORS.log
# php_flag display_errors on
</IfModule>
如上所述:这是针对apache类型的服务器,而不是Nginx或其他服务器。
使用以下代码:
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Hello, errors!" );
然后看文件:
tail -f /tmp/php-error.log
或者从2008年开始更新这个博客条目中描述的php.ini。
看看php.ini中的log_errors配置选项。它似乎只做你想做的事。我认为您也可以使用error_log选项来设置您自己的日志文件。
当log_errors指令设置为On时,PHP报告的任何错误都将被记录到服务器日志或error_log指定的文件中。如果需要,你也可以用ini_set来设置这些选项。
(请注意,如果该选项被启用,在php.ini中应该禁用display_errors)
这是我的log函数:
您可以通过编辑$maxLogs=5编辑日志行, $logOrder='top'
<?php
lg('script start','start');
#Code......
lg('script end','End of code');
function lg($str,$mod='Your Log Category'){
$ts = microtime(true);
if(!defined('logTimer')){
define('logTimer',microtime(true));
}
$diff=abs(round(($ts-logTimer)*1000,2));
$maxLogs=5;
$logOrder='top';#new Logs at top
$filename = './log.txt';
$log=[];
if(!file_exists($filename)){
if(!file_put_contents($filename,json_encode($log,128))){
echo "Can’t open to write '$filename' Check Permissions";
return;
}
}else{
$c=file_get_contents($filename);
if(trim($c)==''){$c='[]';}
$log =@json_decode($c,true);
if(!is_Array($log)){$log=[];}
}
$new=['mod'=>$mod,'date'=> date('Y-m-d H:i:s')." Scripttime: ".$diff."ms",'log'=>$str];
if($logOrder=='top'){
array_unshift($log , $new);
$log=array_slice($log,0,$maxLogs);
}else{
$log[]=$new;
$log=array_slice($log,0-$maxLogs,$maxLogs);
}
$logs=json_encode($log,128);
if(!file_put_contents($filename,$logs) ){echo ("Can’t open to write '$filename' Check Permissions") ;return;}
return $str;
}
?>
输出如下所示:
[
{
"mod": "delete",
"date": "2022-08-04 13:48:02 0.33ms",
"log": "test 2"
},
{
"mod": "start",
"date": "2022-08-04 13:48:29 0ms",
"log": "test"
},
{
"mod": "delete",
"date": "2022-08-04 13:48:29 0.27ms",
"log": "test 2"
},
{
"mod": "start",
"date": "2022-08-04 13:48:34 0ms",
"log": "test"
},
{
"mod": "delete",
"date": "2022-08-04 13:48:34 0.92ms",
"log": "test 2"
}
]