Как записать ошибки и предупреждения в файл? - PullRequest
216 голосов
/ 20 августа 2010

Как включить все ошибки и предупреждения и записать их в файл, но настроить все это внутри скрипта (ничего не меняя в php.ini). Я хочу определить имя файла, чтобы все ошибки и предупреждения регистрировались в нем.

Ответы [ 7 ]

338 голосов
/ 20 августа 2010

Используйте следующий код:

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 г..

87 голосов
/ 20 августа 2010

См.

  • error_log - Отправить сообщение об ошибке куда-нибудь

Пример

error_log("You messed up!", 3, "/var/tmp/my-errors.log");

Вы можете настроить обработку ошибок с вашими собственными обработчиками ошибок , чтобы вызывать эту функцию для вас всякий раз, когда возникает ошибка или предупреждение, или что вам нужно для регистрации.За дополнительной информацией обращайтесь к главе Обработка ошибок в руководстве по PHP

30 голосов
/ 27 сентября 2017

Просто поместите эти коды в начало вашего файла PHP / index:

error_reporting(E_ALL); // Error engine - always TRUE!

ini_set('ignore_repeated_errors', TRUE); // always TRUE

ini_set('display_errors', TRUE); // Error display - FALSE only in production environment or real server

ini_set('log_errors', TRUE); // Error logging engine

ini_set('error_log', 'your/path/to/errors.log'); // Logging file path

ini_set('log_errors_max_len', 1024); // Logging file size
19 голосов
/ 12 июня 2015

добавить этот код в .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.

6 голосов
/ 25 июня 2017

Это моя личная короткая функция

# 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);
}
6 голосов
/ 20 августа 2010

Посмотрите на параметр конфигурации log_errors в php.ini.Кажется, делать то, что вы хотите.Я думаю, что вы можете использовать опцию error_log, чтобы установить свой собственный файл журнала.

Когда директива log_errors установлена ​​на On, любые ошибки, о которых сообщает PHP, будутрегистрируется в журнале сервера или в файле, указанном error_log.Вы также можете установить эти опции с помощью ini_set, если вам нужно.

(Обратите внимание, что display_errors должен быть отключен в php.ini, если эта опция включена)

0 голосов
/ 11 апреля 2016

Кроме того, вам нужна директива «AllowOverride Options», чтобы это работало.(Apache 2.2.15)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...