Web uygulamamız ExceptionMapper
bazı istisnaları eşlemek için bir kullanmaktadır Response
. Aşağıdaki gibi yeni bir istisna atmadan önce istisna mesajlarını kaydediyoruz:
catch (SomeException ex) {
LOG.error(ex.getMessage());
throw new MyException(ex.getMessage());
}
Biz yeniden atma aynı istisna değil bu bir düşünülebilir eğer sorum şu yüzden, Log ve antipattern atın . Ve böylece, benzer yerlerde günlüğe kaydetmeyi kaldırmak ve ExceptionMapper
aşağıdaki gibi birkaç sınıfa taşımak daha iyi olur :
@Provider
public class MyExceptionMapper implements ExceptionMapper<MyException> {
// bla bla
@Override
public Response toResponse(final MyException ex) {
LOG.error(ex.getMessage());
return Response.status(400).entity("something").build();
}
}
Muhtemel kopyası : İstisnaların mesaj metnini rapor etmeli misiniz?
Tartışılabilir, istisnalar mesaj metni raporlama olduğu zaman kötü bir fikirdir .
IMO, bunun bir web hizmeti olduğunu belirtmemek gerçekten adil değil. Bu, oyun kurallarını gerçekten değiştirir, çünkü örneğin, sadece düzenli istisna işleme mekaniğini kullanmak bir güvenlik riski olabilir; herhangi bir istisnanın kontrol edilmesi ve filtrelenmesi gereken 500 hata yanıtında geri gönderilmesini istemezsiniz. Harici istemcilerin doğrudan çağırmasını sağlayan sistemlerle uğraşırken, olay yerinde agresif günlük kaydı çok daha yaygındır. Tekrar tekrar çağrılan servis çağrılarındaki günlük yığınları yönetilemez günlük dosyası boyutlarına ve performans sorunlarına yol açabilir.
@Gimby Bu durumda OP yanıtta herhangi bir hata bilgisi göndermez (muhtemelen bir ortak değer "hata oluştu" içeriği). Ayrıca, yığın izlemesi olmayan bir sorunu nasıl teşhis edersiniz? Yuvarlama günlükleri düzenli olarak depolama boyutuna dikkat eder ve günlük verileri büyük ölçüde sıkıştırılabilir.
—
Marko Topolnik
ex.getMessage()
, bu zaten yanlış.