Odpowiedzi:
Użyj następującego kodu:
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Hello, errors!" );
Następnie obejrzyj plik:
tail -f /tmp/php-error.log
Lub zaktualizuj php.ini
zgodnie z opisem w tym wpisie na blogu z 2008 roku.
php_flag log_errors on php_value error_log /home/path/public_html/domain/PHP_errors.log
. Zobacz perishablepress.com/…
tmp/php-error.log
którego chcesz wybrać lokalizację?
Widzieć
error_log
- Wyślij gdzieś komunikat o błędziePrzykład
error_log("You messed up!", 3, "/var/tmp/my-errors.log");
Możesz dostosować obsługę błędów za pomocą własnych procedur obsługi błędów, aby wywoływały tę funkcję za każdym razem, gdy wystąpi błąd lub ostrzeżenie lub cokolwiek, co musisz zarejestrować. Aby uzyskać dodatkowe informacje, zapoznaj się z rozdziałem Obsługa błędów w podręczniku PHP
Po prostu umieść te kody na górze pliku PHP / indeksu:
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
display_errors
dodaj ten kod do .htaccess (jako alternatywa dla funkcji 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>
* jak skomentowano: dotyczy to serwerów typu Apache , a nie Nginx i innych.
To moja osobista krótka funkcja
# 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);
}
Spójrz na log_errors
opcję konfiguracji w php.ini. Wydaje się, że robi to, co chcesz. Myślę, że możesz użyć error_log
opcji, aby ustawić własny plik rejestrowania.
Gdy log_errors
dyrektywa jest ustawiona na On
, wszelkie błędy zgłaszane przez PHP będą rejestrowane w dzienniku serwera lub w pliku określonym za pomocą error_log
. W ini_set
razie potrzeby możesz ustawić te opcje również.
(Pamiętaj, że display_errors
należy wyłączyć w php.ini, jeśli ta opcja jest włączona)
display_errors
wyłączyć, jeśli włączysz log_errors
? Moim zdaniem nie ma to sensu. :)
ini_set
działa tylko wtedy, gdy ten kod jest wykonywany. Nie jest użyteczny w przypadku kodu, który zawiera błędy analizy, ponieważ błąd wystąpi przed wykonaniem kodu. Zamiast tego zapisz te zmiany w php.ini.