# 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