Способы реализации записи данных в лог-файлы.

Включаем вывод всех ошибок:

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);
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;
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 - Логирование для 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']);
  • https://www.php-fig.org/psr/psr-3/
  • https://habr.com/ru/post/456676/