Логирование в Bitrix: обёртка логгера с записью в /bitrix/logs/
Обёртка для логирования с записью в /bitrix/logs/ и JSON-контекстом для удобного парсинга логов.
Как использовать
- Скопируйте нужный фрагмент кода.
- Вставьте в свой проект и при необходимости измените под задачу.
- Проверьте зависимости и окружение (версии, переменные).
Централизованное логирование с записью в /bitrix/logs/ и JSON-контекстом. Используйте для отладки в проде и мониторинга ошибок.
use Bitrix\Main\IO\File;
use Bitrix\Main\Application;
class BitrixLogger {
private $logDir;
private $logFile;
public function __construct($logFile = 'app.log') {
$this->logDir = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/logs/';
$this->logFile = $this->logDir . $logFile;
// Создаём директорию, если нет
if (!is_dir($this->logDir)) {
@mkdir($this->logDir, 0755, true);
}
}
/**
* Логирование с контекстом
* @param string $level info|warning|error|debug
* @param string $message
* @param array $context Дополнительные данные
*/
public function log($level, $message, array $context = []) {
$data = [
'timestamp' => date('Y-m-d H:i:s'),
'level' => strtoupper($level),
'message' => $message,
'context' => $context,
'request_uri' => $_SERVER['REQUEST_URI'] ?? '',
'user_id' => $GLOBALS['USER']->GetID() ?: null,
];
$logLine = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . "\n";
File::putFileContents($this->logFile, $logLine, \Bitrix\Main\IO\File::APPEND);
}
public function info($message, array $context = []) {
$this->log('info', $message, $context);
}
public function error($message, array $context = []) {
$this->log('error', $message, $context);
}
public function warning($message, array $context = []) {
$this->log('warning', $message, $context);
}
public function debug($message, array $context = []) {
if (defined('BX_DEBUG') && BX_DEBUG) {
$this->log('debug', $message, $context);
}
}
}
// Использование
$logger = new BitrixLogger('custom.log');
$logger->error('Order update failed', [
'order_id' => 12345,
'error' => $exception->getMessage(),
'trace' => $exception->getTraceAsString()
]);
Usage:
Создайте класс в /local/php_interface/classes/BitrixLogger.php и используйте в коде. Логи будут в /bitrix/logs/custom.log в JSON формате.
Notes:
⚠️ Регулярно ротируйте логи (logrotate) и ограничьте доступ к /bitrix/logs/ через .htaccess или nginx. Не логируйте пароли и персональные данные.