Files
crm.clientright.ru/ERROR_LOGGING_IMPROVEMENT.md
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- Added comprehensive AI Assistant system (aiassist/ directory):
  * Vector search and embedding capabilities
  * Typebot proxy integration
  * Elastic search functionality
  * Message classification and chat history
  * MCP proxy for external integrations

- Implemented Court Status API (GetCourtStatus.php):
  * Real-time court document status checking
  * Integration with external court systems
  * Comprehensive error handling and logging

- Enhanced S3 integration:
  * Improved file backup system with metadata
  * Batch processing capabilities
  * Enhanced error logging and recovery
  * Copy operations with URL fixing

- Added Telegram contact creation API
- Improved error logging across all modules
- Enhanced callback system for AI responses
- Extensive backup file storage with timestamps
- Updated documentation and README files

- File storage improvements:
  * Thousands of backup files with proper metadata
  * Fix operations for broken file references
  * Project-specific backup and recovery systems
  * Comprehensive file integrity checking

Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
2025-10-16 11:17:21 +03:00

8.7 KiB
Raw Permalink Blame History

Улучшение логирования ошибок прокси-сервера

Дата: 15 октября 2025
Проблема: Ошибка 500 от прокси-сервера без детальной информации в логах
Статус: Исправлено

Проблема

При ошибке 500 от explorer-proxy.debex.ru в логах сохранялось только короткое сообщение:

2025-10-15 13:51:06 - получили ошибку при выполнении запроса: 
Server error: `POST https://explorer-proxy.debex.ru/api/v3/production/sudrf` 
resulted in a `500 Internal Server Error` response

НО! Прокси-сервер мог вернуть детальную информацию об ошибке в теле ответа (response body), которая не логировалась.

Почему так было?

Старый код:

} catch (Exception $ex) {
    $output = $ex->getMessage();  // ← Только короткое сообщение!
    file_put_contents('logs/send2court.log', 
        date('Y-m-d H:i:s').' - получили ошибку: '.$output.PHP_EOL, 
        FILE_APPEND);
}

При этом Guzzle в объекте исключения содержит полный HTTP ответ, включая:

  • Статус код
  • Заголовки
  • Тело ответа с деталями ошибки

Решение

Модифицирована функция SendRequest() в файле /include/utils/Debexpert-guzzle.php.

Что добавлено

} catch (Exception $ex) {
    // Сохраняем короткое сообщение
    $output = $ex->getMessage();
    file_put_contents('logs/send2court.log', 
        date('Y-m-d H:i:s').' - получили ошибку: '.$output.PHP_EOL, 
        FILE_APPEND);
    
    // 🔍 НОВОЕ: Извлекаем детали из ответа
    if ($ex instanceof \GuzzleHttp\Exception\RequestException && $ex->hasResponse()) {
        $response = $ex->getResponse();
        $statusCode = $response->getStatusCode();
        $responseBody = (string) $response->getBody();
        
        // Логируем статус код
        file_put_contents('logs/send2court.log', 
            date('Y-m-d H:i:s').' - HTTP статус код: '.$statusCode.PHP_EOL, 
            FILE_APPEND);
        
        // Логируем тело ответа
        file_put_contents('logs/send2court.log', 
            date('Y-m-d H:i:s').' - Тело ответа от сервера: '.$responseBody.PHP_EOL, 
            FILE_APPEND);
        
        // Если JSON - парсим для читаемости
        $jsonData = json_decode($responseBody, true);
        if (json_last_error() === JSON_ERROR_NONE && !empty($jsonData)) {
            file_put_contents('logs/send2court.log', 
                date('Y-m-d H:i:s').' - Детали ошибки (JSON): '.print_r($jsonData, true).PHP_EOL, 
                FILE_APPEND);
        }
    } else {
        file_put_contents('logs/send2court.log', 
            date('Y-m-d H:i:s').' - Тело ответа недоступно (возможно, проблема с соединением)'.PHP_EOL, 
            FILE_APPEND);
    }
}

Что теперь будет в логах

До исправления:

2025-10-15 13:51:06 - непосредственно отправляем запрос. Попытка №1
2025-10-15 13:51:06 - получили ошибку при выполнении запроса: Server error...
2025-10-15 13:51:06 - удален временный файл: /tmp/auth_doc_xxx.pdf

После исправления:

2025-10-XX XX:XX:XX - непосредственно отправляем запрос. Попытка №1
2025-10-XX XX:XX:XX - получили ошибку при выполнении запроса: Server error...
2025-10-XX XX:XX:XX - HTTP статус код: 500
2025-10-XX XX:XX:XX - Тело ответа от сервера: {"error":"Invalid certificate format","details":"..."}
2025-10-XX XX:XX:XX - Детали ошибки (JSON): Array
(
    [error] => Invalid certificate format
    [details] => Certificate signature verification failed
    [timestamp] => 2025-10-XX XX:XX:XX
)
2025-10-XX XX:XX:XX - удален временный файл: /tmp/auth_doc_xxx.pdf

Возможные причины ошибки 500

Теперь мы сможем точно определить причину! Возможные варианты:

1. Проблемы с сертификатом

{
  "error": "Certificate validation failed",
  "details": "Invalid signature or expired certificate"
}

Решение: Проверить актуальность сертификата в БД

2. Проблемы с форматом данных

{
  "error": "Invalid request format",
  "field": "fillData.appealDocument.pagesCount",
  "message": "Expected integer, got string"
}

Решение: Исправить формат данных в запросе

3. Превышение лимитов

{
  "error": "Request too large",
  "size": "15MB",
  "limit": "10MB"
}

Решение: Оптимизировать размер файлов

4. Проблемы на стороне сервера

{
  "error": "Internal server error",
  "message": "Temporary unavailable, please retry later"
}

Решение: Повторить запрос позже или связаться с техподдержкой

5. Проблемы с авторизацией

{
  "error": "Authentication failed",
  "message": "Invalid or expired session cookies"
}

Решение: Обновить cookies

Результаты проверки

Дата: 15 октября 2025, 16:41-16:43
Проект: 390657 (Агеев / ООО СКИЛБОКС)

Проблема ошибки 500 РЕШЕНА!

Оказалось, что ошибка 500 была следствием проблемы со скачиванием файлов с #:

  1. До исправления:

    • 5 файлов с # в имени не скачивались (HTTP 403)
    • В суд отправлялось только 16 из 21 файлов
    • Прокси-сервер обнаруживал несоответствие (JSON указывает 21 файл, реально 16)
    • Результат: ошибка 500
  2. После исправления:

    • Все 21 файл скачались успешно (# → %23)
    • Полный пакет документов отправлен в суд
    • Результат: получен регистрационный номер 41RS0001-201-25-0001140

Вывод

Улучшенное логирование реализовано и готово к использованию, но в данном конкретном случае не потребовалось - исправление URL-кодирования решило обе проблемы.

При возникновении новых ошибок 500 в будущем, улучшенное логирование поможет быстро диагностировать причину.

Как протестировать

Чтобы сразу увидеть детали, можно:

  1. Запустить Send2Court вручную для проблемного проекта:

    php Send2Court.php?id=390657&processType=201.01&version=Prod
    
  2. Проверить логи после ошибки:

    tail -n 50 logs/send2court.log | grep -A 10 "получили ошибку"
    
  3. Найти строки с деталями:

    • "HTTP статус код:"
    • "Тело ответа от сервера:"
    • "Детали ошибки (JSON):"

Преимущества

Полная диагностика - видим точную причину ошибки
Быстрое решение - не нужно гадать, что пошло не так
История проблем - все детали сохраняются в логах
Обратная совместимость - работает со всеми типами ответов


Примечание: Это дополняет исправление с URL-кодированием символа #. Теперь у нас есть:

  1. Исправление проблемы со скачиванием файлов (SEND2COURT_S3_URL_FIX.md)
  2. Детальное логирование ошибок от прокси-сервера (этот документ)