PHP
#bitrix#php#logging#debug#production#monitoring

Логирование в Bitrix: обёртка логгера с записью в /bitrix/logs/

Обёртка для логирования с записью в /bitrix/logs/ и JSON-контекстом для удобного парсинга логов.

Как использовать

  1. Скопируйте нужный фрагмент кода.
  2. Вставьте в свой проект и при необходимости измените под задачу.
  3. Проверьте зависимости и окружение (версии, переменные).

Централизованное логирование с записью в /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. Не логируйте пароли и персональные данные.