Her Laravel uygulaması üretimde hata verir. Sorun şu: kullanıcılarınızdan önce bunu fark ediyor musunuz?
Logları manuel olarak kontrol etmekten sıkıldım ve bir paket geliştirdim; bu paket, bir hata oluştuğunda anında Telegram, Slack ve Discord’a eyleme geçirilebilir hata bildirimleri gönderiyor.
İşte bu paketi nasıl geliştirdiğim ve neler öğrendiğim.
Sorun
Sorun
Çoğu Laravel hata izleme çözümü ya çok pahalı, ya kurması karmaşık, ya da bağlam içermeyen genel bir uyarı gönderiyor.
Benim istediğim şuydu:
- Benim zaten kullandığım kanallara anında bildirim gönderme
- Neyin ve nerede kırıldığını gösterme
- Ne yapmam gerektiğini önerme
- Kurulumu son derece basit olma
Böylece laravel-error-notifier paketini geliştirdim.
Ne Yapar
Ne Yapar
Bu paket, Laravel’ın istisna yöneticisine bağlanır ve bir istisna üretimde meydana geldiğinde yapılandırılmış kanallarınıza biçimlendirilmiş bir bildirim gönderir.
Bir Telegram bildirimi şöyle görünür:
🚨 ACİL | your-app.com
QueryException
SQLSTATE[42S02]: Table ‘users’ doesn’t exist
📁 app/Services/UserService.php:45
💡 Öneri: Migration durumunuzu kontrol edin
Kurulum
Kurulum
composer require alhumsi/laravel-error-notifier
php artisan vendor:publish --tag=error-notifier-config
Kanallarınıza ait kimlik bilgilerini .env dosyanıza ekleyin:
ERROR_NOTIFIER_TELEGRAM_BOT_TOKEN=your-token
ERROR_NOTIFIER_TELEGRAM_CHAT_ID=your-chat-id
ERROR_NOTIFIER_SLACK_WEBHOOK=https://hooks.slack.com/…
ERROR_NOTIFIER_DISCORD_WEBHOOK=https://discord.com/api/webhooks/…
Hepsi bu kadar. Manuel kayıt gerekmez — paket kendini otomatik olarak keşfeder.
Nasıl Çalışır
Nasıl Çalışır
Paket, üç temel soyutlamayı kullanır:
AnalyzerInterface — istisna türlerini ciddiyet seviyelerine eşler.
Bir QueryException kritik‘dir. Bir ValidationException hata‘dır.
Bunu kendi analizörünüzle değiştirebilirsiniz.
MessageFormatterInterface — her kanal için bildirimi biçimlendirir.
Telegram MarkdownV2 kullanır. Slack Block Kit kullanır. Discord gömülü mesajlar kullanır.
Her biçimleyici, kanalına özgü bir mesaj üretir.
NotifierInterface — biçimlendirilmiş mesajı HTTP ile gönderir.
Asenkron teslimat için bunu arka planda bir kuyruk uygulaması ile değiştirebilirsiniz.
Ciddiyet Derecesine Göre Uyarıları Yönlendirme
Ciddiyet Derecesine Göre Uyarıları Yönlendirme
config/error-notifier.php içinde:
'levels' => [
'emergency' => ['slack', 'telegram'],
'critical' => ['slack'],
'error' => ['discord'],
],
Yüksek ciddiyetli uyarılar anında Slack’e gönderilirken, daha düşük ciddiyetli uyarılar Discord’a log kanalı olarak yönlendirilir. Hangi uyarının nereye gideceğine siz karar verirsiniz.
Ciddiyete Göre Özel İkonlar
Ciddiyete Göre Özel İkonlar
'icons' => [
'emergency' => '🚨',
=> '🔥',
=> '❌',
=> '⚠️',
],
Küçük bir detay ama bu, uyarıları bir göz atarak taramayı kolaylaştırır.
Bu Paketi Geliştirirken Öğrendiklerim
Bu Paketi Geliştirirken Öğrendiklerim
1. Sözleşmeler paketleri genişletilebilir hale getirir.
Her temel davranış bir arayüzün arkasındadır. Kullanıcılar analizörü, biçimlendiriciyi veya bildirimciyi paket kodunu değiştirmeden değiştirebilir.
Birinin kullanacağı paketle, birinin fork edip değiştireceği paket arasındaki fark budur.
2. Otomatik keşif önemlidir.
config/app.php dosyasına bir ServiceProvider eklemek bir sürtünme noktasını oluşturur.
Laravel’ın paket otomatik keşfi bu sürtünmeyi tamamen ortadan kaldırır.
Daha az sürtünme = daha fazla kurulum.
3. İlk günden itibaren test yazın.
Implementasyon tamamlanmadan önce testleri yazdım. Bu, bana önce kamu API’sini düşünme zorunda bıraktı ve kodu önemli ölçüde temiz hale getirdi.
Deneyin
Deneyin
composer require alhumsi/laravel-error-notifier
GitHub: https://github.com/Alhumsiabdo/laravel-error-notifier
Packagist: https://packagist.org/packages/alhumsi/laravel-error-notifier
Faydalı bulursanız, GitHub’da bir ⭐ çok şey ifade eder.
Laravel uygulamalarınızda hangi hata izleme sistemini kullanıyorsunuz?
Yorumlarda duymak isterim.
Kaynak: Orijinal Makale


