Вывод дополнительных логов при отладке обработчиков в Битрикс24

В каких-то случаях нам может быть недостаточно логирования в Журнале событий или php-error.log, тогда нужно изменить немного файл /bitrix/.settings.php.

То, что там по умолчанию:

'exception_handling' => 
  array (
    'value' => 
    array (
      'debug' => true,
      'handled_errors_types' => 4437,
      'exception_errors_types' => 4437,
      'ignore_silence' => false,
      'assertion_throws_exception' => true,
      'assertion_error_type' => 256,
      'log' => NULL,
    ),
    'readonly' => false,
  ),

Меняем на:

'exception_handling' => 
  array (
    'value' => 
    array (
      'debug' => true,
      'handled_errors_types' => 4437,
      'exception_errors_types' => 4437,
      'ignore_silence' => false,
      'assertion_throws_exception' => true,
      'assertion_error_type' => 256,
      'log' => array( // Настройки логирования
            'settings' => array(
                'file' => $_SERVER['DOCUMENT_ROOT'].'/upload/logs/system_errors.log', // Путь к логу
                'log_size' => 10 * 1024 * 1024, // 10MB макс. размер файла
                'log_level' => E_ALL, // Уровень логирования
            ),
            'callbacks' => array( // Кастомные обработчики
                'exception' => function($exception) {
                    $logDir = $_SERVER['DOCUMENT_ROOT'].'/upload/logs/';
                    if (!is_dir($logDir)) {
                        mkdir($logDir, 0755, true);
                    }
                    
                    $message = sprintf(
                        "[%s] %s in %s:%d\nStack Trace:\n%s\n\n",
                        date('Y-m-d H:i:s'),
                        $exception->getMessage(),
                        $exception->getFile(),
                        $exception->getLine(),
                        $exception->getTraceAsString()
                    );
                    
                    file_put_contents(
                        $logDir.'critical_'.date('Y-m-d').'.log',
                        $message,
                        FILE_APPEND
                    );
                }
            )
        )
    ),
    'readonly' => false,
  ),

Теперь тут у нас появится лог ‘/upload/logs/ с названием system_errors.log