112 lines
3.4 KiB
Markdown
112 lines
3.4 KiB
Markdown
# 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 в запросах автоматически форматируется для лучшей читаемости
|
||
- Все оригинальные заголовки сохраняются и передаются на целевой сервер
|
||
|
||
|