Bu rehberde neler öğreneceksiniz?
- ✓ Build (Derleme) ve Run (Çalışma) logları arasındaki kritik farkı anlayacaksınız.
- ✓ Canlı logları izleyerek hataların kök nedenini (root cause) saniyeler içinde tespit etmeyi göreceksiniz.
-
✓
Sık karşılaşılan
EADDRINUSEveConnection Refusedhatalarını çözmeyi öğreneceksiniz.
İyi bir geliştirici ile harika bir geliştirici arasındaki fark, log okuma ve yorumlama hızında yatar. Skyversal, uygulamanızın arka planda ürettiği tüm stdout ve stderr çıktılarını gecikmesiz olarak tarayıcınıza taşır. Sorun çözmek (production debugging) için SSH ile sunucuya bağlanmanıza, terminalde "tail" komutları koşturmanıza gerek kalmaz.
🧱 1. Build (Derleme) Logları
Projeniz her güncellendiğinde (GitHub'a push attığınızda veya manuel re-deploy tetiklediğinizde) çalıştırılan geçici izolasyon adımının günlükleridir. Uygulamanız bu aşamada henüz dış dünyaya açılmamıştır.
Build Loglarında Genellikle Şunları Görürsünüz:
- Paket yöneticilerinin indirdiği kütüphaneler (
npm install,composer install). - TypeScript veya asset derleme süreçleri (
vite build,next build). - Eksik paket veya yazım hatası (Syntax Error) bildirimleri.
Eğer uygulamanızın kodu bozuksa ve Build aşamasında çökerse (Failed), Skyversal yeni versiyonu canlıya almaz. Siteniz eski versiyonuyla, sıfır kesintiyle (Zero-Downtime) çalışmaya devam eder. Log ekranındaki kırmızı ERROR satırlarına odaklanarak eksik paketi veya kod hatasını bulup yerelde düzeltebilirsiniz.
⚡ 2. Runtime (Çalışma Zamanı) Logları
Build işlemi başarıyla tamamlandığında sistem Run komutunu çalıştırır ve uygulamanız dünyaya açılır. Runtime logları; uygulamanız trafik aldıkça, veritabanına bağlandıkça veya içeride bir hata fırlatıldığında sürekli olarak ekrana akan üretim günlükleridir.
[14:22:01] INFO: Server running on port 8080
[14:22:05] INFO: Database connected successfully
[14:25:12] WARN: Slow query detected in /api/users (2045ms)
[14:28:44] ERROR: Connection refused at tcp://db-host:5432
🩺 3. Sık Karşılaşılan Log Hataları ve Çözümleri
Port Dinleme Hatası
Bu hata, uygulamanızın Skyversal'in dinamik olarak atadığı port yerine, kendi içindeki sabit bir portu (örn: 3000) dinlemeye çalışması yüzünden oluşur. Skyversal, uygulamanızın dış dünya ile iletişim kuracağı asıl portu $PORT çevresel değişkeni (environment variable) olarak kodunuza gönderir.
// Uygulama sadece kendi içinde 3000 portuna sıkışır ve dışarıdan erişilemez.
app.listen(3000, 'localhost');
// Sistemden gelen portu yakalar, bulamazsa 8080'i dener ve tüm IP'lere (0.0.0.0) açılır.
const port = process.env.PORT || 8080;
app.listen(port, '0.0.0.0');
Veritabanı veya Servis Erişimi
Eğer uygulamanız "Crashed" durumundaysa ve loglarda Connection Refused görüyorsanız, Environment Variables (.env) sayfasında veritabanı ayarlarınızın (DB_HOST, DB_PASSWORD vb.) eksiksiz olduğundan emin olun. Geliştirme ortamınızdaki yerel (localhost) veritabanına Skyversal üzerinden erişemeyeceğinizi unutmayın; dışa açık, uzak bir veritabanı adresi girmeniz gerekir.
🎉 Profesyonel Gibi Debug Edin!
Artık projenizde ters giden her şeyi loglardan nasıl takip edeceğinizi ve altyapı sorunlarını kod seviyesinde nasıl çözeceğinizi biliyorsunuz. Platformumuzu kullanarak tamamen otonom uygulamalar yönetmeye çok yakınsınız.
Sonraki rehberimizde projenize veritabanı eklentilerini nasıl bağlayacağınızı ve yöneteceğinizi öğrenebilirsiniz.
👉 Yönetilen Veritabanları (Managed Databases)