Способы логирования в PHP проектах
Способы реализации записи данных в лог-файлы.
Включаем вывод всех ошибок:
declare(strict_types=1); ini_set('display_errors', '1'); ini_set('display_startup_errors', '1'); error_reporting(E_ALL);
Запись строки
$log = date('Y-m-d H:i:s') . ' Запись в лог'; file_put_contents(__DIR__ . '/log.txt', $log . PHP_EOL, FILE_APPEND);
Запись массива
$array = [ 'foo' => 'bar', 'data' => [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);
Запись массива одной строкой
$array = [ 'foo' => 'bar', 'data' => [1, 2] ]; $log = date('Y-m-d H:i:s') . ' '; $log .= str_replace([' ', PHP_EOL], '', print_r($array, true)); file_put_contents(__DIR__ . '/log.txt', $log . PHP_EOL, FILE_APPEND);
Результат работы PHP скрипта
ob_start(); // Вывод заголовков браузера. foreach (get_headers('https://yandex.ru') 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);
Результат работы скрипта можно записать в лог и таким способом:
$path = realpath(__DIR__); $logPath = $path . '/runtime/'; try { $command = "php $path/handler.php > {$logPath}process.log 2>&1 &"; exec($command); } catch (Exception $exception) { echo $exception->getMessage(); }
Файл handler.php
:
echo date('Y/m/d H:i:s') . ': Сервис запущен' . PHP_EOL; for ($i = 0; $i <= 10; $i++): echo "Итерация: $i" . PHP_EOL; endfor; echo date('Y/m/d H:i:s') . ': Сервис остановлен' . PHP_EOL;
Запись в лог ошибок PHP
ini_set('error_log', __DIR__ . '/php-errors.log'); error_log('Запись ошибки в лог', 0); // More $logPath = __DIR__ . '/runtime'; $errorMsg = date('Y/m/d H:i:s') . ': Сообщение в лог' . PHP_EOL; error_log($errorMsg, 3, $logPath . '/errors.log');
Простая функция
function logger($message) { $logPath = __DIR__ . '/runtime'; if (!is_dir($logPath)) { mkdir($logPath, 0777, true); } $errorMsg = date('Y/m/d H:i:s') . ": $message" . PHP_EOL; error_log($errorMsg, 3, $logPath . '/errors.log'); } // Вызываем логер logger('Ошибка получения данных в файле ' . __FILE__);
Monolog
Monolog - Логирование для PHP
use Monolog\Logger; use Monolog\Handler\StreamHandler; $logPath = __DIR__ . '/runtime'; $logger = new Logger('warning'); $logger->pushHandler(new StreamHandler("$logPath/warning.log", Logger::WARNING)); $logger->warning('Ошибка!', ['name' => 'John']);