**Soru:** Uygulamamda hata oluşunca ekrana teknik hata mesajı mı göstereyim yoksa sadece log'a mı yazayım? İkisinin ortası nerede? **Kısa Cevap:** Hata mesajı kullanıcı log ayrımı şöyle yapılır: kullanıcı ne yapması gerektiğini bilmeli, teknik detay görmemeli. Log ise tam teknik bilgiyi içermeli; geliştiriciye yönelik. --- Bu soru iyi yazılım tasarımının merkezinde yer alır. Yanlış yapılan iki uç vardır: **Uç 1: Her şeyi kullanıcıya göster** ``` Hata: NullReferenceException at UserService.cs line 47 in method GetUser() Stack trace: at System.Data... ``` Bu mesajı gören kullanıcı ne yapacağını bilemez ve bu bilgi güvenlik açığı da yaratır (saldırgan hangi framework ve versiyon kullanıldığını öğrenir). **Uç 2: Her şeyi gizle** Sadece "Bir hata oluştu" yazmak kullanıcıyı tamamen karanlıkta bırakır. Ne yapacağını bilmeden siteyi terk eder. **Doğru yaklaşım: İki katmanlı mesajlaşma** Hata mesajı kullanıcı log dengesi şöyle kurulur: **Kullanıcıya gösterilenler:** - Ne olduğunun insan dilinde özeti: "Dosyanız yüklenemedi." - Ne yapması gerektiği: "Lütfen 5 MB'dan küçük bir dosya seçin." - Varsa destek yönlendirmesi: "Sorun devam ederse referans koduyla iletişime geçin: ERR-4821" **Log'a yazılanlar:** - Tam hata stack trace - Hangi kullanıcı (ID ile, isimle değil) - Hangi işlem sırasında, hangi zaman damgasında - Sistem durumu (bellek, bağlantı bilgileri) - Referans kodu (kullanıcının gördüğüyle eşleşen) **Güvenlik notu** Stack trace, dosya yolları, SQL sorguları veya dahili sunucu adresleri asla kullanıcıya gösterilmemelidir. Bu bilgiler saldırı yüzeyini genişletir. **Pratik referans kodu sistemi** Hata mesajı kullanıcı log koordinasyonu için referans kodu kullanmak en pratik çözümdür. Kullanıcıya göster: `Hata kodu: ERR-2024-07-29-8821`. Log'a aynı kodu yaz. Kullanıcı destek ekibini aradığında bu kodla log'dan tam hatayı bulursun. Özetle: kullanıcı eylem alabilmeli, geliştiricinin teşhis yapabilmesi için de log eksiksiz olmalıdır. İkisinin aynı mesaj olması ne gerekli ne de doğru.