Php error logging to file

Запись ошибок выполнения PHP скриптов в файл

Все php ошибки нужно обязательно записывать в лог-файл и регулярно изучать его. Если этого не делать — есть шанс пропустить часть багов, которые появляются в процессе работы или тестирования и не выводятся на экран. По умолчанию, запись ошибок в файл отключена на многих конфигурациях (и это правильно!), но есть несколько способов это исправить:

Способ 1 — написать функцию перехвата ошибок и записи их в файл:

# В начале нашего скрипта пишем: set_error_handler('err_handler'); function err_handler($errno, $errmsg, $filename, $linenum) < $date = date('Y-m-d H:i:s (T)'); $f = fopen('errors.txt', 'a'); if (!empty($f)) < $filename =str_replace($_SERVER['DOCUMENT_ROOT'],'',$filename); $err = "$errmsg = $filename = $linenum\r\n"; fwrite($f, $err); fclose($f); >> 

Способ 2 — изменить php.ini:

log_errors = On error_log = /var/log/php_errors.log 

Способ 3 — добавить в .htaccess:

php_value log_errors "On" php_value error_log /var/log/php_errors.log 

Способ 4 — добавить в самое начало php скрипта:

ini_set('log_errors', 'On'); ini_set('error_log', '/var/log/php_errors.log');

Если создание сайтов было выполнено качественно, то и ошибок выводиться на экран не должно. Конечно, не всегда этого можно добиться по этому в идеале, перестраховаться и писать уведомления в файл. Крайне не рекомендуется использовать символ собаки @ для подавления ошибок т.к. в последствии можно пропустить очень важное уведомление.

Источник

Запись в лог-файл в PHP

Несколько вариантов как быстро организовать запись данных в лог-файл.

Строки текста

$log = date('Y-m-d H:i:s') . ' Запись в лог'; file_put_contents(__DIR__ . '/log.txt', $log . PHP_EOL, FILE_APPEND);

Запись в лог-файле:

2019-02-02 16:00:38 Запись в лог

Массивы

Если нужно записать в лог обычный массив, массив с индексами или многомерный массив, поможет функция print_r() .

$array = array( 'foo' => 'bar', 'helo' => 'world', 'array' => array(1, 2) ); $log = date('Y-m-d H:i:s') . ' ' . print_r($array, true); file_put_contents(__DIR__ . '/log.txt', $log . PHP_EOL, FILE_APPEND);

Запись в лог-файле:

2019-02-02 16:43:27 Array ( [foo] => bar [helo] => world [array] => Array ( [0] => 1 [1] => 2 ) )

В одну строку

$array = array( 'foo' => 'bar', 'helo' => 'world', 'array' => array(1, 2) ); $log = date('Y-m-d H:i:s') . ' '; $log .= str_replace(array(' ', PHP_EOL), '', print_r($array, true)); file_put_contents(__DIR__ . '/log.txt', $log . PHP_EOL, FILE_APPEND);
2019-02-02 16:56:00 Array([foo] => bar[helo] => world[array] => Array([0] => 1[1] => 2))

Результат работы PHP скрипта

Если нужно добавить в лог результат работы PHP скрипта, помогут функции буферизации ob_start() и ob_get_clean() .

ob_start(); // Вывод заголовков браузера. foreach (getallheaders() as $name => $value) < echo "$name: $value\n"; >$log = date('Y-m-d H:i:s') . PHP_EOL . ob_get_clean() . PHP_EOL; file_put_contents(__DIR__ . '/log.txt', $log, FILE_APPEND);

Запись в лог-файле:

2019-11-20 12:54:58 Host: example.com X-HTTPS: 1 X-Forwarded-Proto: https Connection: close cache-control: max-age=0 upgrade-insecure-requests: 1 user-agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534 (KHTML, like Gecko) sec-fetch-user: ?1 accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 x-compress: null sec-fetch-site: none sec-fetch-mode: navigate accept-encoding: gzip, deflate, br accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7 cookie: PHPSESSID=123

Запись в лог ошибок PHP

Если логирование предполагает фиксацию только ошибок, то лучше писать их в общий лог PHP, подробнее на php.net.

error_reporting(E_ALL); ini_set('error_log', __DIR__ . '/php-errors.log'); error_log('Запись в лог', 0);
[02-Feb-2019 20:18:17 Europe/Moscow] Запись в лог

Источник

Читайте также:  Javascript top window offset top
Оцените статью