# Log Proxy - Логирующий реверс-прокси для реверс-инжиниринга API Простой HTTP реверс-прокси на Go, который логирует все входящие запросы и исходящие ответы для анализа API. ## Возможности - ✅ Перехват и логирование всех HTTP запросов (метод, URL, заголовки, тело) - ✅ Перехват и логирование всех HTTP ответов (статус, заголовки, тело) - ✅ Автоматическое форматирование JSON в логах - ✅ Вывод времени выполнения запросов - ✅ Красивый консольный вывод и JSON формат - ✅ Сохранение оригинальных заголовков и путей ## Установка ```bash go mod download ``` ## Использование ### Способ 1: Через аргументы командной строки ```bash go run main.go http://api.example.com ``` ### Способ 2: Через переменные окружения ```bash export TARGET_URL=http://api.example.com export PORT=8080 # опционально, по умолчанию 8080 go run main.go ``` ### Способ 3: Сборка и запуск ```bash go build -o log-proxy ./log-proxy http://api.example.com ``` ## Примеры ### Базовое использование ```bash # Запуск прокси на порту 8080, перенаправление на api.example.com go run main.go http://api.example.com # В другом терминале отправляем запрос через прокси curl http://localhost:8080/api/users ``` ### С кастомным портом ```bash PORT=3000 go run main.go http://api.example.com ``` ### Логирование в файл ```bash go run main.go http://api.example.com 2>&1 | tee api-logs.txt ``` ## Формат логов Прокси выводит два формата логов: 1. **Человекочитаемый формат** - красивый вывод в консоль с разделителями 2. **JSON формат** - структурированные данные для дальнейшей обработки Каждая запись содержит: - Временную метку - Метод и URL запроса - Заголовки запроса и ответа - Тело запроса и ответа - Время выполнения запроса ## Пример вывода ``` ================================================================================ [2024-01-15 10:30:45] GET /api/users Remote: 127.0.0.1:52341 Request Headers: User-Agent: curl/7.68.0 Accept: */* [2024-01-15 10:30:45] Response: 200 (45ms) Response Headers: Content-Type: application/json Content-Length: 1234 Response Body: { "users": [...] } ================================================================================ ``` ## Примечания - Длинные тела ответов (>2000 символов) обрезаются для читаемости в консольном выводе - JSON в запросах автоматически форматируется для лучшей читаемости - Все оригинальные заголовки сохраняются и передаются на целевой сервер