34 lines
1.5 KiB
Markdown
34 lines
1.5 KiB
Markdown
# RequestLog
|
||
|
||
**Özet:** Her proxy'lenen isteğin kaydını tutan GORM modeli (`models/request_log.go:13`). Hassas header'lar (Authorization) asla düz metin olarak saklanmaz. Loglama fire-and-forget goroutine ile yapılır.
|
||
|
||
**Kütüphaneler:** GORM, PostgreSQL, Go `time`
|
||
|
||
**Bağlantılar:** [[Main]], [[OpenAIHandler]], [[AnthropicHandler]], [[Index]]
|
||
|
||
## Tablo: `request_logs`
|
||
|
||
| Column | GORM Tipi | JSON | Açıklama |
|
||
|--------|-----------|------|----------|
|
||
| `id` | `uint` (PK) | `id` | Otomatik artan |
|
||
| `created_at` | `time.Time` | `created_at` | Oluşturulma zamanı |
|
||
| `updated_at` | `time.Time` | `updated_at` | Güncellenme zamanı |
|
||
| `deleted_at` | `gorm.DeletedAt` | (gizli) | Soft delete index |
|
||
| `endpoint` | `string(512)` | `endpoint` | İstek yolu |
|
||
| `method` | `string(16)` | `method` | HTTP metodu |
|
||
| `client_ip` | `string(64)` | `client_ip` | İstemci IP |
|
||
| `request_body` | `text` | `request_body` | Body (2000 char limit) |
|
||
| `response_status` | `int` | `response_status` | HTTP yanıt kodu |
|
||
| `latency_ms` | `int64` | `latency_ms` | İşlem süresi (ms) |
|
||
|
||
## Sabitler
|
||
|
||
- `maxBodyLength = 2000` — `TruncateBody()` ile body bu limite kırpılır
|
||
|
||
## Önemli Detaylar
|
||
|
||
- `TruncateBody()` body'yi 2000 karakterde kırpar, sonuna `…[truncated]` ekler
|
||
- Loglama **fire-and-forget** (`go db.Create()`): loglama hatası ana isteği etkilemez
|
||
- Hassas header'lar (Authorization, X-Api-Key) veritabanına yazılmaz
|
||
- DB bağlantısı yoksa loglama tamamen atlanır
|