Документация для разработчиков
Темная тема

Логирование

Клиент поддерживает PSR-3 логгеры. Рекомендуется настраивать логирование через .settings.php – в этом случае можно создавать разные экземпляры логгера для каждого запроса. Это может быть полезным для логирования пачки асинхронных запросов – например, записывать отладку в разные файлы, а не перемешанные части разных запросов в один файл.

Конструктор логгера получает объект типа \Bitrix\Main\Web\Http\DebugInterface, который позволяет установить уровень логирования (см. константы \Bitrix\Main\Web\HttpDebug), и объект запроса типа \Psr\Http\Message\RequestInterface.

return [
	// ...
	'loggers' => [
		'value' => [
			'main.HttpClient' => [
				'constructor' => function (\Bitrix\Main\Web\Http\DebugInterface $debug, \Psr\Http\Message\RequestInterface $request) { 
					$debug->setDebugLevel(\Bitrix\Main\Web\HttpDebug::ALL);
					return new \Bitrix\Main\Diag\FileLogger('/home/bitrix/www/httplog'. spl_object_hash($request) . '.txt');
				},
				'level' => \Psr\Log\LogLevel::DEBUG,
			],
		],
	],
	// ...
];

Возвращаемому логгеру можно установить свой форматтер. Например, чтобы просто логировать все обращения к внешним ресурсам через http-клиент, можно использовать следующее решение:

return [
	// ...
	'loggers' => [
		'value' => [
			'main.HttpClient' => [
				'constructor' => function (\Bitrix\Main\Web\Http\DebugInterface $debug, \Psr\Http\Message\RequestInterface $request) {
					$debug->setDebugLevel(\Bitrix\Main\Web\HttpDebug::REQUEST_HEADERS);
	
					$logger = new \Bitrix\Main\Diag\FileLogger($_SERVER['DOCUMENT_ROOT'] . '/http.txt');
	
					$logger->setFormatter(
						new class($request) implements \Bitrix\Main\Diag\LogFormatterInterface 
						{
							public function __construct(public \Psr\Http\Message\RequestInterface $request) {}
	
							public function format($message, array $context = []): string
							{
								// Игнорировать запросы push-сервера
								if ($this->request->getUri()->getPort() === 1337)
								{
									return '';
								}
	
								return $this->request->getUri() . " \t" . $_SERVER['REQUEST_URI'] . "\n";
							}
						}
					);
    
					return $logger;
				},
				'level' => \Psr\Log\LogLevel::DEBUG,
			],
		],
		'readonly' => true,
	],
	// ...
];


© «Битрикс», 2001-2024, «1С-Битрикс», 2024