Как записать ошибки и предупреждения в файл?
Как включить все ошибки и предупреждения и записать их в файл, но настроить все это внутри скрипта (ничего не меняя в php.ini). Я хочу определить имя файла и сделать так, чтобы в него входили все ошибки и предупреждения.
9 ответов
Используйте следующий код:
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Hello, errors!" );
Затем посмотрите файл:
tail -f /tmp/php-error.log
Или обновить php.ini
как описано в этой записи блога с 2008 года.
Увидеть
error_log
- отправить сообщение об ошибке куда-нибудь
пример
error_log("You messed up!", 3, "/var/tmp/my-errors.log");
Вы можете настроить обработку ошибок с помощью своих собственных обработчиков ошибок, чтобы вызывать эту функцию для вас всякий раз, когда возникает ошибка или предупреждение, или что вам нужно для регистрации. За дополнительной информацией обращайтесь к главе "Обработка ошибок" в руководстве по PHP.
Просто поместите эти коды в начало вашего файла PHP/index:
error_reporting(E_ALL); // Error engine - always ON!
ini_set('display_errors', TRUE); // Error display - OFF in production env or real server
ini_set('log_errors', TRUE); // Error logging
ini_set('error_log', 'your/path/to/errors.log'); // Logging file
ini_set('log_errors_max_len', 1024); // Logging file size
Добавьте этот код в .htaccess (в качестве альтернативы функции php.ini / ini_set):
<IfModule mod_php5.c>
php_flag log_errors on
php_value error_log ./path_to_MY_PHP_ERRORS.log
</IfModule>
ps это для серверов типа Apache.
Это моя личная короткая функция
# logging
/*
[2017-03-20 3:35:43] [INFO] [file.php] Here we are
[2017-03-20 3:35:43] [ERROR] [file.php] Not good
[2017-03-20 3:35:43] [DEBUG] [file.php] Regex empty
mylog ('hallo') -> INFO
mylog ('fail', 'e') -> ERROR
mylog ('next', 'd') -> DEBUG
mylog ('next', 'd', 'debug.log') -> DEBUG file debug.log
*/
function mylog($text, $level='i', $file='logs') {
switch (strtolower($level)) {
case 'e':
case 'error':
$level='ERROR';
break;
case 'i':
case 'info':
$level='INFO';
break;
case 'd':
case 'debug':
$level='DEBUG';
break;
default:
$level='INFO';
}
error_log(date("[Y-m-d H:i:s]")."\t[".$level."]\t[".basename(__FILE__)."]\t".$text."\n", 3, $file);
}
Посмотрите на log_errors
опция конфигурации в php.ini. Кажется, делать то, что вы хотите. Я думаю, что вы можете использовать error_log
возможность установить свой собственный файл журнала тоже.
Когда log_errors
директива установлена On
любые ошибки, о которых сообщает PHP, будут записываться в журнал сервера или в файл, указанный с помощью error_log
, Вы можете установить эти параметры с ini_set
тоже, если нужно.
(Обратите внимание, что display_errors
должен быть отключен в php.ini, если эта опция включена)
Ни в одном из этих ответов не упоминается важность или актуальность для Agile-команд; Работа по развитию профессионального уровня чаще всего выполняется в контексте команды.
Имея в виду, что многие команды разработчиков используют инструмент отслеживания задач, такой какJIRA
, я предпочитаю использовать временную метку для регистрации каждой ошибки в виде отдельного файла:
error_reporting(E_ALL);
ini_set('log_errors', 1);
ini_set('error_log', $_SERVER['DOCUMENT_ROOT'] . '/logs/php/php-errors-' . time() . '.txt');
Используя этот подход, менеджеру проекта или руководителю группы легко изолировать каждую ошибку как отдельный файл, который затем можно прикрепить к уникальному дефекту JIRA, назначить разработчику и отслеживать (отметка времени может быть связана с дефектом). чтобы легко отслеживать, пока исправление дефекта находится в процессе). Когда проблема закрыта, файл может быть удален из каталога журнала, а его копия (при необходимости для дальнейшего использования) может быть доступна в JIRA.
Кроме того, вам нужна директива "AllowOverride Options", чтобы это работало. (Apache 2.2.15)
вот моя функция журнала:
Вы можете редактировать строки журнала, редактируя$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"
}
]