Способы логирования в 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']);
Почитать по теме
Предыдущая запись
PDOx: конструктор запросов для PHP PDOСледующая запись
Примеры использования cURL в PHP