Aplikasi web kami menggunakan a ExceptionMapper
untuk memetakan beberapa pengecualian Response
. Kami mencatat pesan pengecualian sebelum melemparkan pengecualian baru sebagai berikut:
catch (SomeException ex) {
LOG.error(ex.getMessage());
throw new MyException(ex.getMessage());
}
Kami tidak melempar kembali pengecualian yang sama , jadi pertanyaan saya adalah apakah ini akan dianggap sebagai antipattern Log dan Throw . Dan dengan demikian, akan lebih baik untuk menghapus logging di tempat yang sama dan memindahkannya ke beberapa ExceptionMapper
kelas sebagai berikut:
@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();
}
}
java
anti-patterns
Diyarbakir
sumber
sumber
ex.getMessage()
, itu sudah salah.Jawaban:
Kode Anda sebenarnya bukan hanya satu, tetapi tiga antipattern:
Jika Anda mengikuti praktik terbaik untuk:
log.error("Error occurred", e);
maka Anda tidak akan menghadapi dilema apa pun, termasuk yang Anda alami saat ini, karena stacktrace yang dicatat akan menyertakan semua pengecualian yang dibungkus juga.
sumber