log-proxy/README.md
2026-01-23 10:03:52 +07:00

112 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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